ano*_*non 3 java garbage-collection stability
您可以通过调用简单地在Java中进行垃圾收集,System.gc()但有时这会"拖延"应用程序.像这样垃圾收集并避免失速是一个坏主意:
new Thread(new Runnable() {
public void run() {
System.gc();
}
}).start();
Run Code Online (Sandbox Code Playgroud)
或者这可能导致更多问题?
hay*_*lem 15
除非你有充分的理由.即使你认为你这样做,你可能也没有.
如果你继续阅读,我假设你有一个非常好的(虽然可能是扭曲的)理由试图搞砸GC,尽管它很可能比你决定什么时候收集它要聪明得多记忆.另外,请记住,通过明确地调用它,你会混淆它并搞砸它的启发式,所以它变得不像以前那么聪明.所有这些都是因为你试图超越它.
如果你这样做了很充分的理由,或者在你真的想确保你下手的最佳存储状态可能密集的代码段的情况下,你需要知道这可能会无法正常工作:调用System.gc()不保证正如其Javadoc (强调我的)所提到的那样进行垃圾收集:
调用gc方法表明 Java虚拟机花费了很多精力来回收未使用的对象.
-XX:+DisableExplicitGC(如果您的JVM支持它)以防止那些疯狂的呼叫造成任何伤害(在评论中归功于Fredrik)grep调用它System.gc()和它的等价物并摆脱它们.请参阅Grooveek的答案,了解其他有用的建议(比如使用WeakReferences).
根据您的使用情况,也许尝试其他GC实现可能会有所帮助:CMC,G1,ParallelGC等...如果您想避免"失速",我在G1中引入了非常好的结果,因为它在最新的Java SE中引入自Java 7发布以来的6次更新,运行密集型企业应用程序以实现长时间运行.
请注意,JVM调优是一项非常复杂的工作.
您可以浏览这些以获取更多详细信息:
*谨慎使用:有时不是最新的,不记录所有内容,并列出了许多实验性功能或仅限HotSpot的功能.
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |