我有一个应用程序,我怀疑它会泄漏一些类引用。
为了暴露这种错误行为,我们编写了一个测试:BundleUnloadIT
在该测试中,我使用
Assertions.assertThat(weakReference.isEnqueued())
.as("weak reference should have been enqueued, but is not").isTrue();
测试我的引用是否正确gc'ed。 但无论我尝试做什么,参考都从未入队。 所以我怀疑某个类在某个地方泄漏了。
所以...我使用正确的方法来测试我的班级是否被卸载?
如果没有,我该如何正确地进行测试?
如果是的话,有一个参考泄露到某处。我该怎么找到它?
答案 0 :(得分:0)
如果没有强引用类的类加载器(也就是类的类加载器也可以被垃圾收集),则只能卸载(垃圾回收)类。如果没有强引用加载的所有类,则只能对类加载器进行垃圾回收。所以它是一个全有或全无的命题。每个类都有一个强大的类加载器引用,每个类加载器都有对它加载的所有类的强引用。因此,如果强烈引用类加载器加载的任何类,则无法对类进行垃圾回收。