回答
當不再有任何引用變量引用它時,或者當它在孤島中孤立時。
島嶼是一個具有指向它的引用變量的對象,但該對象沒有指向它的引用變量。
class A { int i = 5; }
class B { A a = new A(); }
class C {
B b;
public static void main(String args[]) {
C c = new C();
c.b = new B();
// instance of A, B, and C created
c.b = null;
// instance of B and A eligible to be garbage collected.
}
編輯:只是想指出的是,儘管A的實例有一個參考,它是在一個小島上,因爲現在B的實例沒有對它的引用。 A實例有資格進行垃圾回收。
當沒有對它的引用時,一個對象是不可取的,或者這些引用本身來自不可重複的對象。
Integer i = new Integer(4);
// the new Integer object is reachable via the reference in 'i'
i = null;
// the Integer object is no longer reachable.
無法訪問的對象是一個沒有「可達」引用的對象。 換句話說,沒有對它的引用。
當對象圖沒有鏈接到對象圖時,則引用變得無法訪問。然後垃圾收集器會掃描這些懸空的孤立對象,然後刷新恢復分配的內存。
java.lang.ref。{Phantom,Soft,Weak}引用排除不可訪問的對象。 如果終結器運行,GC已經知道它無法訪問。
讀到finalization- http://java.sun.com/developer/technicalArticles/javase/finalization/
在僅具有強引用一種語言,堆中的對象可以是從 程序到達或不可訪問。可達對象集由程序 中指向堆對象的類變量和方法變量組確定。這個集合通常被稱爲程序的根集。程序根集中變量 指向的對象是可到達的。另外,一個對象可能是間接可達的。也就是說,如果有另一個可達的對象指向它,則可以訪問一個對象 。從程序 的根集合到堆對象的這種引用鏈被稱爲可達性路徑。一個對象可能有多條可達性路徑,並且根本沒有可達性路徑。如果對象沒有可達性路徑,則它被認爲是垃圾,並且可以立即由垃圾收集器收集到 。
當沒有更強的引用存在時,對象將進入不可訪問狀態。當一個對象無法訪問時,它就是收集的候選對象。注意措辭:僅僅因爲對象是收集的候選人並不意味着它會立即收集。 JVM可以自由延遲收集,直到對象立即需要消耗內存爲止。 重要的是要指出,不只是任何強大的引用將保存在內存中的對象。這些必須是從垃圾收集根鏈中鏈接的引用。GC根是一類特殊的變量,包括堆棧 靜態變量(任何類)從JNI本機代碼
更多,如果你喜歡http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html
特別引用(任何線程)上臨時變量
「當沒有更強的引用存在時,對象進入不可訪問狀態」:這是不正確的。一個對象可以有強烈的引用,但不能從根集訪問,因此將被垃圾收集。例如,A引用B,B引用A,但都不能從根集合中到達。 – namanhams 2017-04-12 10:14:11
- 1. Java GC問題:一個對象在其中一個方法仍在執行時如何變得無法訪問?
- 2. 什麼時候一個對象得到一個不是臨時的對象ID?
- 3. 什麼時候在功能方法中放置一個對象?
- 4. 什麼時候C++默認賦值運算符變得無法訪問?
- 5. 什麼時候需要在java中初始化一個對象,什麼時候不需要?
- 6. 爲什麼在從SharedPreferences訪問對象後得到一個NullPointerException?
- 7. 我無法訪問java中的對象
- 8. 什麼時候應該在Javascript中創建一個新對象?
- 9. 什麼時候應該在dealloc中釋放一個對象?
- 10. 我什麼時候可以訪問ASPError對象?
- 11. 什麼時候可以模擬一個對象及其方法?
- 12. 爲什麼在使用jQuery時無法通過窗口對象訪問對象?
- 13. 什麼時候可以訪問init方法的實例變量?
- 14. Python:什麼時候兩個變量指向內存中的同一個對象?
- 15. 在運行時無法訪問對象
- 16. 無法訪問另一個對象中的對象成員變量
- 17. 有什麼方法可以知道什麼時候創建了一個對象?
- 18. 爲什麼我無法循環訪問這個SimpleXML對象?
- 19. Java:無法訪問對象的元素
- 20. 無法從類方法訪問對象變量(Java)
- 21. PHP對象無法訪問的變量
- 22. 無法訪問類對象變量
- 23. 什麼時候變得關係
- 24. 什麼時候變得更好?
- 25. 無法訪問的變量我要訪問的對象變量對象
- 26. 爲什麼我無法訪問javascript中的對象屬性?
- 27. 爲什麼我無法訪問javascript中的對象值
- 28. 會話在對象中無法訪問?
- 29. Unity,改變一個子對象的旋轉。無法訪問子對象
- 30. 無法訪問對象子類的變量? (Java/Android)
非常好的例子,但變量命名有點混亂。 – Kiril 2014-11-15 11:34:08