我试图摆脱一些内存泄漏。我想从类加载器重置所有类(不仅仅是我的)的所有静态变量。有一个classes
属性,它列出了ClassLoader所知道的所有类。
所以我只想循环它,并通过反射将静态变量设置为null。
问题是所有这些类都没有被初始化(Static Block Initialization没有运行)。由于目的是重置值,然后卸载类,因此没有必要初始化这些类。此外,当我重置在另一个类CHILD的SBI中使用的类ROOT时,运行CHILD的SBI可能会导致意外行为…
所以问题是:是否有一种方法可以知道SBI是否已经由JVM运行。
<标题>注意:
对于任何建议使用ClassLoader的findloaddclass的人,在规范中有这个重要的句子:*在这篇文章中,有一个重要的注意事项:"加载"并不意味着"初始化"。初始化只发生在JLS3 $12.4.1 *
标题>如果在JVM上加载了类,则static
块已初始化。
类是否加载在JVM上,可以使用ClassLoader