回答
值類型存儲在堆棧上。這意味着,運行時會將指針指向每個方法的堆棧頂部,並且當您從方法返回時,此頂部將向下移動。使此方法中聲明的任何變量超出範圍。
對於類字段,這些字段被存儲在具體類的內存中,並作爲類本身的一部分進行垃圾收集。
-1並非所有的值類型都在堆棧中。 –
我們正在根據「何時值類型的變量超出範圍」來討論方法中的局部變量。所有這些都存儲在堆棧中。 – Euphoric
@Euphoric:並非所有變量都是參數。 OP沒有具體詢問參數;有多種其他方式可以使變量超出範圍。 –
只有存儲分配在堆必須被垃圾收集。
如果一個值類型變量是在堆上,它的一些其它類的任一部分,或者裝箱值,這是其中僅包含值類型值的對象。該值是包含垃圾收集對象時「釋放」的內存的一部分。
如果一個值類型變量位於堆棧上,當堆棧框架被返回的方法彈出時,它使用的內存將被有效「釋放」。
請注意,什麼最終在堆棧上,什麼最終在堆上是一個implementation detail這是由捕獲的變量,迭代塊,異步方法,ref參數等更復雜。但廣泛的原則是,使用的內存對於值類型值始終是「別的東西」的一部分 - 所以當回收那個「別的東西」的內存時它會被回收。 (這不是某種單獨的步驟 - 無論是對象還是堆棧幀,該值都存儲在內存中「其他」)。
- 1. 值類型是否收集垃圾收集?
- 2. 垃圾收集器如何確定對象是否是垃圾?
- 3. OCaml的垃圾收集幻象類型
- 4. 垃圾收集
- 5. 類垃圾收集任務
- 6. 當垃圾收集垃圾時,Haskell是否放棄了火花?
- 7. java垃圾收集是否安全地清除垃圾數據?
- 8. GC是否從Metaspace收集垃圾?
- 9. 垃圾收集 - 是否需要?
- 10. WinRT是否有垃圾收集?
- 11. 是否收集Java DirectByteBuffer包裝垃圾?
- 12. 垃圾收集器是否有配置?
- 13. 是否收集了客觀C垃圾?
- 14. 垃圾收集是否影響堆棧?
- 15. 垃圾收集是由
- 16. 活物是垃圾收集?
- 17. 垃圾價值
- 18. 垃圾收集java
- 19. DoctrineCommonCache垃圾收集?
- 20. Java垃圾收集
- 21. 垃圾收集器
- 22. C#垃圾收集
- 23. Java垃圾收集
- 24. WeakEvent垃圾收集
- 25. GWT垃圾收集
- 26. 何時收集垃圾回收值?
- 27. 垃圾收集期間是否會檢查持久性收集?
- 28. 垃圾收集爲值類型包裝器
- 29. 垃圾收集YGCT和垃圾收集時間不斷上升
- 30. 是否有必要使垃圾收集的原始值無效?
可能重複的[值類型獲取垃圾收集?](http ://stackoverflow.com/questions/2342772/do-value-types-get-garbage-collected) – nawfal