0

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

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

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

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


笔记:

对于任何建议使用 ClassLoader 的 findLoadedClass 的人,规范中有这么重要的一句话:*在这篇文章中,有一个重要说明:“已加载”并不意味着“已初始化”。初始化只发生在 JLS3 $12.4.1 定义的精确时刻 *

4

1 回答 1

0

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

是否在 JVM 上加载了类,您可以使用ClassLoader检测到

于 2013-05-02T13:19:09.440 回答