2012-04-04 72 views
1

我以Java为基准测试了一个服务器进程,看起来Hotspot并没有制作很多GC,但是当它出现时,它的性能大幅提升。强制热点频繁GC?

我可以强制热点进行频繁的小选区,而不是少数大规模的长期的GC?

回答

0

你可以告诉JVM通过做垃圾回收编程:System.gc()。请注意,Javadoc说这只是一个建议。在进入关键部分之前,您可以尝试调用此部分,您不希望GC性能受损。

+0

关于这一点的事情是,它实际上是一个建议。你说:“嘿,垃圾收集器,你能给我一个清理吗?”它完全被允许回应“Lolnope!” – Lucas 2012-04-04 14:16:32

1

与调用GC时的干涉通常是一个坏主意。 如果你对gc的性能有问题,一个更好的方法是调整伊甸园,幸存者和旧空间的大小。

如果完全扫必须完成它并没有真正的问题是如何经常被称为,速度永远是相对缓慢的,唯一的快速GC电话是那些在伊甸园和生存空间。

因此增加伊甸园和生存空间可能会解决你的问题,但不幸的是良好的内存分析是相当费时和复杂的执行。

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (链接被盗其他答案)也给出了如何配置的选项,如果有必要。 -XX:NewRatio = 2或-XX:NewRatio = 3可能会增加速度,但也可能会减慢速度。不幸的是,这是非常依赖于应用

0

可以提高频率的GC是通过降低年轻/新的大小进行以上经常打电话GC。这并不意味着你会暂停更少的时间,只是经常会发生。

减少GC的影响,最好的办法是到内存配置您的应用程序,并降低你的生产垃圾量。这不仅会使您的代码更快,而且会减少每次GC发生的频率和时间。

在更极端的情况下,可以减少GC发生的频率少于每天一次,删除它作为一个问题都在一起。