强制Java虚拟机运行垃圾收集器

Dot*_*Net 3 java garbage-collection

我有一个在大型数据集上运行的复杂Java应用程序.该应用程序执行速度相当快,但随着时间的推移,它似乎占用了大量内存并减速.有没有办法在不重新启动应用程序的情况下运行JVM垃圾收集器?

xyz*_*xyz 16

,你不能强迫垃圾收集.
即使使用

System.gc();  
Run Code Online (Sandbox Code Playgroud)

你可以只提出垃圾收集请求,但它依赖于JVM来做或不做.

垃圾收集器也足够聪明,可以在需要时收集未使用的内存,因此您应该检查是否以错误的方式处理对象,而不是强制进行垃圾收集.
如果以错误的方式处理对象(比如保持对不必要的对象的引用),JVM几乎无法释放内存.

来自Doc

调用gc方法表明 Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用.当控制从方法调用返回时,Java虚拟机 已尽最大努力从所有丢弃的对象中回收空间.

打开有关文档的 BugSystem.gc()

System.gc()的文档极具误导性,未能参考从不调用System.gc()的推荐做法.

语言的选择使得不清楚调用System.gc()时会出现什么行为,以及哪些外部因素会影响行为.

当您认为应该强制JVM释放一些内存时,很少有有用的链接访问
1. 垃圾收集如何工作
2. System.gc()什么时候做什么
3. 为什么调用System.gc()是不好的做法?

所有人说
1.你不能控制Java中的GC甚至System.gc()不保证它.
2.强迫它的不良做法也可能对业绩产生不利影响.
3.重新审视您的设计,让JVM完成他的工作:)