我知道所有垃圾收集。但是究竟是什麼告訴JRE現在是垃圾收集的時候了?這是否像一些事件或時間間隔?什麼觸發垃圾收集
什麼觸發垃圾收集
回答
您可以使用System.gc();
,但不能保證它可以運行(它只是「建議」GC運行)。這個JVM有不同的實現,包括可以在不同模式下運行的GC,並且有非常複雜的算法,這些算法通常工作得很好,也就是說,如果你有特殊用法(或者特殊事件,比如重啓後) - 您可以調整它using flags(如:最小堆大小,最大堆大小等),但即使沒有這樣做,GC也會收集具有空引用的對象(指向它們的指針),只要需要從堆中釋放內存。
對象有空引用,那麼它將垃圾收集。但是GC沒有給出保證,比如什麼時候完成。作爲一個很好的做法不完全依賴於GC
HotSpot的垃圾收集已經成長爲一個非常複雜的業務,甚至它的創造者的鬥爭中充分詳細地瞭解。因此你不能得到一個簡單的答案;一些觸發器是:
- 佔用每個對象的世代達到閾值;
- 內存分配請求特定代失敗;
- 整體堆佔用達到閾值。
注意,你甚至還沒有指定什麼垃圾收集樣你感興趣的是:有一個輕微收集和主要集合,技術上他們是非常不同的。您還沒有指定您想要的垃圾收集器:HotSpot有四個可供選擇的垃圾收集器。
如果你是初學Java的人,最好的建議是a)在日常編程中,不要擔心;和b)如果你想學習,你將不得不去dig deep。
當java發生垃圾回收時JVM
認爲它需要基於Java heap size的垃圾回收。
但你可以強制使用GC
System.gc()
或
Runtime.gc()
收集垃圾,但它不能保證垃圾收集會發生。
瞭解更多:http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html#ixzz2Y9gKzQE1
你不是「強迫」垃圾收集。正如你自己所說:沒有保證。我認爲**要求**在這裏是更好的詞。 –
- 1. 什麼觸發java垃圾收集器
- 2. 如何觸發垃圾收集?
- 3. 垃圾收集
- 4. 什麼是垃圾收集器?
- 5. 爲什麼這是垃圾收集
- 6. 爲什麼FastBitmap無法收集垃圾?
- 7. 垃圾收集java
- 8. DoctrineCommonCache垃圾收集?
- 9. Java垃圾收集
- 10. 垃圾收集器
- 11. C#垃圾收集
- 12. Java垃圾收集
- 13. WeakEvent垃圾收集
- 14. GWT垃圾收集
- 15. 觸發gen2垃圾回收的是什麼?
- 16. Java:什麼是垃圾收集器收集?
- 17. 垃圾收集器在收集死對象時會做什麼?
- 18. 垃圾收集YGCT和垃圾收集時間不斷上升
- 19. PHP何時觸發垃圾回收器?
- 20. 找出什麼對象垃圾收集器正在發佈:
- 21. 當Scala「Future」被垃圾收集時會發生什麼?
- 22. 什麼是'大多數併發垃圾收集器'?
- 23. 併發垃圾收集的好處是什麼?
- 24. 垃圾收集何時發生?
- 25. 如何關閉併發垃圾收集?
- 26. Android遊戲開發和垃圾收集
- 27. 垃圾收集:將對象收集
- 28. 觸發一個.NET垃圾收集外部
- 29. 2維數組上的Arrays.sort沒有觸發垃圾收集?
- 30. 觸發Java垃圾收集的簡單程序
肯定有人問過這個...是的。 – Ben