垃圾收集器如何確定對象是否是垃圾?它是否指向堆棧以檢查對堆中分配的空間的引用?垃圾收集器如何確定對象是否是垃圾?
3
A
回答
4
它採用mark and sweep algorithm。簡化版本:首先考慮所有對象符合資格收集。然後它掃描物體的根。任何有根的對象都會被標記爲正在使用中。之後所有剩餘的對象都被認爲是垃圾。 Jeffrey Richter在CLR via C#中有詳細的描述。
0
3
This文章A.亨特解釋這一切還不錯。
總之,GC以下引用查找所有不可達的對象。如果一個對象或其任何超類包含另一個對象的字段,則該對象引用另一個對象。
爲了達到這個目的,GC跟蹤四種類型的根對象,稱爲GC根。最常見的根類型是堆棧上創建的所有變量(如您猜測的那樣)。其他根類型是靜態的,互操作性的和帶有終結器方法的對象。
所以是的,GC在大多數情況下指的是堆棧。
+0
一個較小的更正 - 在堆棧上創建的所有變量都是誤導性的,「當前正在運行的方法中的局部變量被認爲是GC根,這些變量引用的對象總是可以通過它們聲明的方法立即訪問因此它們必須被保留,這些根的生命週期可以取決於程序的構建方式,在調試版本中,只要方法在堆棧上,局部變量就會持續。參考。 - http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/ – akjoshi 2012-05-24 06:56:32
相關問題
- 1. 垃圾收集對象
- 2. 垃圾收集器是否有配置?
- 3. 垃圾收集器
- 4. java垃圾收集是否安全地清除垃圾數據?
- 5. 活物是垃圾收集?
- 6. 如何跟蹤垃圾收集對象
- 7. ActiveX對象和.NET垃圾收集器
- 8. 如何判斷一個對象是否被垃圾收集
- 9. 垃圾收集 - 是否需要?
- 10. 垃圾收集是否影響堆棧?
- 11. 是否收集了客觀C垃圾?
- 12. GC是否從Metaspace收集垃圾?
- 13. Scala對象何時收集垃圾?
- 14. 如何確定我是否需要使用垃圾回收器?
- 15. 垃圾收集java
- 16. Java垃圾收集
- 17. Java垃圾收集
- 18. C#垃圾收集
- 19. GWT垃圾收集
- 20. DoctrineCommonCache垃圾收集?
- 21. Renderscript和垃圾收集器
- 22. Node.js的垃圾收集器
- 23. .NET垃圾收集器
- 24. 垃圾收集器Flash Player
- 25. 垃圾收集器vs池
- 26. 垃圾收集器asp.net
- 27. Jruby,垃圾收集器,Redis
- 28. 是否有可能爲垃圾收集「查看」對象圖?
- 29. ParameterizedThreadStart是否保證對象實例不會被垃圾收集?
- 30. 此COM對象是否被垃圾收集?
得到了這本書,並閱讀它。非常感謝。現在非常清楚。 – devnull 2010-03-23 09:55:56