如何知道是否已经运行了静态块初始化



我试图摆脱一些内存泄漏。我想从类加载器重置所有类(不仅仅是我的)的所有静态变量。有一个classes属性,它列出了ClassLoader所知道的所有类。

所以我只想循环它,并通过反射将静态变量设置为null。

问题是所有这些类都没有被初始化(Static Block Initialization没有运行)。由于目的是重置值,然后卸载类,因此没有必要初始化这些类。此外,当我重置在另一个类CHILD的SBI中使用的类ROOT时,运行CHILD的SBI可能会导致意外行为…

所以问题是:是否有一种方法可以知道SBI是否已经由JVM运行。


<标题>注意:

对于任何建议使用ClassLoader的findloaddclass的人,在规范中有这个重要的句子:*在这篇文章中,有一个重要的注意事项:"加载"并不意味着"初始化"。初始化只发生在JLS3 $12.4.1 *

定义的精确时刻

如果在JVM上加载了类,则static块已初始化。

类是否加载在JVM上,可以使用ClassLoader

检测

相关内容

  • 没有找到相关文章

最新更新