任何人都可以請告訴我什麼將與對象相互引用? java的GC如何解決這個問題?提前致謝!java GC如何清理相關對象
0
A
回答
5
如果你有對象A和B,如果滿足以下條件成立:
- A引用到B
- b號至A
- 沒有其他對象引用 它們中的任何一個
- 他們不是根對象(在常量例如對象池等)
然後,這兩個對象將是垃圾回收。這被稱爲「循環參考」。
這是因爲mark-and-sweep GC會掃描並找出所有可從根對象訪問的對象。如果A和B在沒有任何外部參考的情況下相互參照,標記和掃描GC將無法將它們標記爲可達,因此將被選作GC的候選。
有許多不同的標記和掃描實現(天真標記和掃描,三色等)。但基本的想法是一樣的。如果無法通過直接/間接引用從根目錄訪問對象,它將被垃圾收集。
+0
Zhang說的是真實的。循環引用也稱爲對象島。根據所使用的GC收集器,所有這些島都標記並一起清理。但是如果任何物體泄漏了島上的參考,那麼沒有人會被GCed並永久保留在舊空間中。所以它實際上是一種折衷。 – Nazgul
0
有一些GC。在年輕一代,有一個複製收藏家。
這樣做是找到從「根」對象引用的所有對象,例如線程堆棧。例如伊甸園空間被複制到倖存者空間,倖存者空間相互複製。任何未清的東西都會被清除。
這意味着如果您有一組彼此相互引用的對象,並且沒有任何對象的強引用,它們將在下一個集合中被丟棄。 (GC可以選擇保留它們的軟參考例外)
相關問題
- 1. GC如何清理結構?
- 2. 如何跟蹤NetBeans中由JAVA GC清除的對象?
- 3. 如何強制處理對象/ GC
- 4. 整理相關對象
- 5. 計算對象上的GC清理次數
- 6. Python 2.6似乎GC清理對象,但內存不釋放
- 7. Full GC,PSPermGen未清理
- 8. 將對象與另一個對象關聯以進行GC清除
- 9. 如何處理多個相關對象(在對象中嵌套)
- 10. 在Java中清理vs還原對象
- 11. Java/libGDX - 清理對象創建
- 12. COM對象清理
- 13. 清理@RequestScoped對象?
- 14. COM對象清理
- 15. Java絕對清理
- 16. 如何清理視圖對象?
- 17. newbie:如何清理JavaScript中的對象?
- 18. 如何處理一對相關的線程對象?
- 19. 如何用OWASP編碼器清理Java對象?
- 20. Java GC未收集某個對象
- 21. 強制GC收集JNI代理對象
- 22. 相關對象
- 23. Java的關閉/清理
- 24. 清理舊的Realm對象?
- 25. 如何優化長期居住對象的Java gc
- 26. Java GC很高,如何找出哪些對象是GCed
- 27. 處理相關對象Hyperledger作曲家
- 28. Django管理鏈接到相關對象
- 29. GDI如何清理對象和用戶對象
- 30. 如何管理對象之間的一對多關係? (移動相關)
是否有任何指向這些對象之一? –
它沒有。仍然被引用的對象不會被丟棄。 –
只要可以通過任何活動線程訪問垃圾,對象就不會被垃圾收集。 – Nishant