垃圾收集器如何確定對象是否是垃圾?它是否指向堆棧以檢查對堆中分配的空間的引用?垃圾收集器如何確定對象是否是垃圾?
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. 當垃圾收集垃圾時,Haskell是否放棄了火花?
- 5. java垃圾收集是否安全地清除垃圾數據?
- 6. 垃圾收集是由
- 7. 活物是垃圾收集?
- 8. 垃圾收集
- 9. 如何跟蹤垃圾收集對象
- 10. 垃圾收集:將對象收集
- 11. 如何判斷一個對象是否被垃圾收集
- 12. ActiveX對象和.NET垃圾收集器
- 13. 是否收集垃圾價值類型?
- 14. GC是否從Metaspace收集垃圾?
- 15. 垃圾收集 - 是否需要?
- 16. WinRT是否有垃圾收集?
- 17. 是否收集Java DirectByteBuffer包裝垃圾?
- 18. 是否收集了客觀C垃圾?
- 19. 垃圾收集是否影響堆棧?
- 20. 對象在G1(垃圾優先)垃圾收集器上的年齡如何?
- 21. 垃圾收集器如何檢測垃圾?
- 22. 如果僅從垃圾中引用對象垃圾,那麼它是垃圾嗎?
- 23. Scala對象何時收集垃圾?
- 24. JavaScript Blob對象何時收集垃圾?
- 25. 如何確定我是否需要使用垃圾回收器?
- 26. 什麼是垃圾收集器?
- 27. 垃圾收集java
- 28. DoctrineCommonCache垃圾收集?
- 29. Java垃圾收集
- 30. C#垃圾收集
得到了這本書,並閱讀它。非常感謝。現在非常清楚。 – devnull 2010-03-23 09:55:56