據我所知只有當JVM需要更多的內存時才使用GC,但我不確定它。所以,請有人提出這個問題的答案。什麼時候在java中使用垃圾回收器?
回答
據我所知,Java的垃圾回收算法非常複雜,並不那麼簡單。此外,還有更多可用於GC的算法,可以在VM啓動時使用傳遞給JVM的參數進行選擇。
有一個關於垃圾收集在這裏FAQ:http://www.oracle.com/technetwork/java/faq-140837.html
甲骨文還發表了一篇文章「調整垃圾回收與5.0的Java(TM)虛擬機」,其中包含的深刻見解變成垃圾收集,並可能幫助你理解這件事更好:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
常見問題鏈接是否有用。 – 2010-09-29 21:55:05
JVM和Java規範沒有說垃圾收集何時發生,所以它完全取決於JVM實現者他們希望使用哪些策略。每個JVM都應該有一些關於它如何處理GC的文檔。
通常情況下,當內存分配將分配的內存總量推到某個閾值以上時,大多數JVM都會觸發GC。可能有多個級別的gc(全部與部分/世代)出現在不同的閾值。
在過去,垃圾收集器本質上是經驗性的。在某個設定的時間間隔或基於某種條件,他們會踢入並檢查每個對象。
現代的收藏家更聰明是因爲他們根據物體具有不同的壽命這一事實進行區分。這些對象區分年輕一代對象和終身代代對象。
內存按照代次在池中進行管理。每當年輕一代記憶池被填滿時,就會發生次要收集。倖存的對象被移動到終身代內存池。當終身代內存池被填滿時,發生主要收集。保留第三代,稱爲永久代,可能包含定義類和方法的對象。
垃圾收集是在Java語言規範中故意模糊地描述的,爲JVM實現者提供了最佳工作條件來提供好的垃圾收集器。
因此,垃圾收集器及其行爲是非常依賴供應商。
最簡單但最不有趣的是當需要清潔時停止整個程序。其他人則更加複雜,並且在您的程序清理過程中安靜地運行,因爲您或多或少地積極參與。
調查垃圾回收的最有趣的方法是在Sun 6 JDK中運行jvisualvm。它允許你看到許多與垃圾收集相關的許多內部事物。
https://visualvm.dev.java.net/monitor_tab.html(但最新的版本有很多更多)
- 1. 什麼時候在Ruby中收集常量垃圾回收?
- 2. 垃圾回收器什麼時候會收集一個Singleton?
- 3. c#中的垃圾回收器什麼時候退出
- 4. 什麼時候對象引用會被垃圾回收?
- 5. 爲什麼禁用垃圾回收器?
- 6. Java垃圾回收器
- 7. java垃圾回收
- 8. Java:垃圾回收
- 9. java - 垃圾回收
- 10. Java:垃圾回收
- 11. 什麼時候是垃圾回收對象?
- 12. 什麼時候動作<T>得到垃圾回收?
- 13. 什麼時候靜態變量得到垃圾回收?
- 14. 什麼觸發java垃圾收集器
- 15. 什麼時候在Python中收集對象垃圾?
- 16. 什麼時候垃圾收集器釋放'請求'對象?
- 17. Java EE:servlet容器中的垃圾回收
- 18. java中垃圾回收器的邏輯
- 19. Python + Numpy:什麼時候手動收集垃圾有用?
- 20. 什麼時候垃圾收集發生在這個Java代碼中?
- 21. .NET垃圾回收器什麼時候會釋放這個對象?
- 22. Android垃圾回收器 - 什麼時候靜態(類級別)var重置?
- 23. Java:使用jlibs保證垃圾回收
- 24. 垃圾回收Java類
- 25. java的垃圾回收Runnable
- 26. Java垃圾回收5
- 27. Java垃圾回收混淆
- 28. Java列表和垃圾回收器
- 29. 垃圾回收 - 期待什麼?
- 30. 使用AutoZone垃圾回收器
有許多好文章網上關於GC。嘗試搜索一些太陽博客或白皮書。這些對你最有幫助。 – 2010-09-29 17:30:00