當對象被引用時,垃圾收集會自動調用,不再可用於任何變量。但是我喜歡知道爲什麼當垃圾收集被自動調用時,我們明確地調用System.gc()。當我們調用System.gc();關於垃圾收集。爲什麼我們需要調用System.gc();?
6
A
回答
6
我們沒有。
我們不這樣做。
也許我的經驗是有限的,但我有不是一次發現有必要調用System.gc()。
我將引用Brian Goetz在性能方面(如果你還沒有聽說過他,看他 - 和閱讀這篇文章的其餘部分,太):
第三類,開發人員經常錯誤地認爲他們正在幫助垃圾收集器使用
System.gc()
,這會觸發垃圾收集(實際上,它僅僅表明這可能是垃圾收集的好時機)。不幸的是,System.gc()
觸發了一個完整的集合,其中包括跟蹤堆中的所有活動對象並清理和壓縮老一代。這可能是很多工作。一般來說,最好讓系統決定何時需要收集堆以及是否進行完整收集。
10
你不知道。正如你所說,垃圾收集是自動的。 System.gc()甚至不強制垃圾收集;這只是提示JVM「現在可能是清理一下的好時機」
一般來說,試圖強制垃圾回收器使用System.gc()來做你想做的事情是一種破解認爲自己比實際做得更好的人,或者作爲破解代碼的(企圖)解決方法。
我已經多年編寫Java,我還沒有看到的情況下調用System.gc真的做正確的事(在什麼我已經寫了)
1
你不需要它。把它看作是一個診斷工具,就像能夠寫入調試控制檯一樣。
例如,想象一下,如果您正在進行基準測試,您會希望告訴GC在每次基準測試運行後收集垃圾。
1
你做需要它。無論這些人說些什麼,這都非常有用。
用法示例: 假設您剛剛完成了使用大量內存的長時間後臺任務。這些對象都不會再被使用。由於任務花了很長時間,用戶不會在意5-10秒。這個是垃圾收集的好時機。
如果你不是 GC在那一點,它將在稍後發生。可能在交互式使用該程序的過程中,用戶體驗變得不穩定。
相關問題
- 1. 在JavaScript中我們需要照顧垃圾收集
- 2. 爲什麼FastBitmap無法收集垃圾?
- 3. 爲什麼這是垃圾收集
- 4. 垃圾收集 - 是否需要?
- 5. 當我們顯式調用垃圾收集器方法時會發生什麼?
- 6. 空和delete()在關於垃圾收集
- 7. 關於垃圾收集器的查詢
- 8. 在讓垃圾收集垃圾之前,我需要釋放Swing組件嗎?
- 9. 使用垃圾收集時,我需要保留屬性嗎?
- 10. 關於當前狀態保存時調用垃圾收集
- 11. 關於Angular2「垃圾回收」
- 12. 需要澄清java垃圾收集複製收集器
- 13. jstat爲G1垃圾收集
- 14. 爲什麼我的窗戶沒有被垃圾收集?
- 15. 垃圾收集java
- 16. Java垃圾收集
- 17. Java垃圾收集
- 18. C#垃圾收集
- 19. GWT垃圾收集
- 20. DoctrineCommonCache垃圾收集?
- 21. 垃圾收集器
- 22. 垃圾收集器,用於託管C++
- 23. 什麼是垃圾收集器在Java中,我們如何使用它
- 24. 爲什麼G1垃圾收集器在完整垃圾收集中使用單線程?
- 25. 爲什麼Android垃圾會使用Jacksons ObjectMapper收集很多次?
- 26. 爲什麼可選的垃圾收集在C++中有用?
- 27. Java:什麼是垃圾收集器收集?
- 28. 垃圾收集器在收集死對象時會做什麼?
- 29. Python的GIL與垃圾收集器有什麼關係?
- 30. CMS對於Java的垃圾收集器意味着什麼?
你不應該調用System.gc()。你爲什麼認爲你需要給它打電話? – 2010-03-03 21:19:14