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

时间:2013-05-02 13:15:15

标签: java reflection static-initialization

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

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

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

所以问题是:有没有办法知道SBI是否已经由JVM运行。


注意:

任何提议使用ClassLoader的findLoadedClass的人,在规范中都有这个重要的句子: *在这篇文章中,有一个重要的注释:“loaded”并不意味着“初始化”。初始化仅发生在JLS3 $ 12.4.1 *

定义的精确时刻

1 个答案:

答案 0 :(得分:0)

如果在JVM上加载了类,则初始化

static块。

您可以使用ClassLoader

检测JVM上的类