簡體   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