繁体   English   中英

如何检查OSGi捆绑包中的类是否已正确卸载?

[英]How to check if a class in an OSGi bundle has been correctly unloaded?

我有一个我怀疑泄漏某些类引用的应用程序。

为了揭示这种越野车行为,我们编写了一个测试: BundleUnloadIT

在那个测试中,我使用

    Assertions.assertThat(weakReference.isEnqueued())
        .as("weak reference should have been enqueued, but is not").isTrue();

测试我的参考文献是否正确。 但是,无论我尝试做什么,都永远不会使引用排队。 因此,我怀疑某些对该类的引用正在某处泄漏。

那么...我是否使用正确的方法测试我的课程是否已卸载?

如果没有,我该如何正确进行测试?

如果是这样,则某个地方泄漏了参考。 我如何找到它?

如果未强烈引用该类的类加载器,则只能卸载该类(收集垃圾)(也就是说,也可以垃圾收集该类的类加载器)。 而且,只有在未强烈引用所有装入的类的情况下,才可以对其进行垃圾回收。 因此,这是一个全有或全无的主张。 每个类都有对其类加载器的强引用,而每个类加载器均具有对其已加载的所有类的强引用。 因此,如果强烈引用了由类加载器加载的任何类,则不可能对类进行垃圾回收。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM