JVM如何确定何时进行垃圾回收?有没有办法限制JVM不触发GC?
JVM如何确定何时进行垃圾回收?有没有办法限制JVM不触发GC?
您无法告诉JVM不要调用GC,但是您可以通过-XX:+ DisableExplicitGC
告诉JVM忽略对System.gc()
的调用。
这主要取决于虚拟机的实现。
另一方面:
显式请求垃圾收集是预示可能存在性能问题的风向标。
不建议调用
System.gc()
、Runtime.getRuntime().gc()
和System.runFinalization()
。代码应该在使用选项-Xdisableexplicitgc
禁用垃圾回收或不禁用时具有相同的行为。此外,“现代”jvm处理垃圾回收非常出色。如果应用程序内部出现与内存泄漏无关的内存使用问题,应使用JVM选项而不是在代码内部解决。
一般来说,垃圾回收只有在必要时才会运行。其中一个例外是并发标记清除,在需要避免停止应用程序的情况下会提前启动。
我认为,最简单/最好的解决方案是不要创建太多的垃圾。您可以使用内存分析器来减少您产生的垃圾量。这将减少您集合的大小以及它们发生的频率。在极端情况下,您甚至可以在白天或整个星期内避免收集垃圾。
减少垃圾的好处是您减少了用垃圾刷新CPU缓存。您的L3缓存仅有几MB,如果您创建了几MB的垃圾,则实际上已经推出了有用信息,从而减慢了应用程序的速度。