我正在使用Java对服务器进程进行基准测试,看起来Hotspot并没有制作很多GC,但是当它确实如此时,它的性能大幅提升。
我可以强制热点制作频繁较小的GC,而不是一些庞大的长GC吗?
答案 0 :(得分:1)
您可以尝试将GC更改为并行或并发。 这是文档的链接。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
答案 1 :(得分:1)
在调用GC时干扰通常是一个坏主意。 如果您对gc的性能有问题,更好的方法是调整伊甸园,幸存者和旧空间的大小。
如果必须进行完全扫描,那么调用它的频率并不重要,速度总是相对较慢,唯一快速的gc调用是伊甸园和幸存者空间。
因此增加伊甸园和幸存者空间可能会解决您的问题,但不幸的是,良好的内存分析相当耗时且执行起来很复杂。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (从其他答案中窃取的链接)还提供了如何在必要时配置的选项。 -XX:NewRatio = 2或-XX:NewRatio = 3可能会提高你的速度,但也可能会减慢它的速度。不幸的是,这非常依赖于应用程序。
答案 2 :(得分:0)
您可以通过以下方式告诉JVM以编程方式执行垃圾回收:System.gc()。请注意,Javadoc说这只是一个建议。您可以尝试在进入不希望GC性能下降的关键部分之前调用此方法。
答案 3 :(得分:0)
您可以通过减少年轻/新的尺寸或更频繁地调用gc来增加GC的执行频率。这并不意味着你会暂停一段时间,只会经常发生这种情况。
减少GC影响的最佳方法是对应用程序进行内存配置,并减少生成的垃圾量。这不仅可以使您的代码更快,而且可以减少每个GC发生的频率和持续时间。
在更极端的情况下,您可以将GC发生的频率降低到每天不到一次,将其作为一个问题全部删除。