当对象被引用时,垃圾收集会自动调用,不再可用于任何变量。但是我喜欢知道为什么当垃圾收集被自动调用时,我们明确地调用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