我正在用Java对一个服务器进程进行基准测试,看起来Hotspot并没有做很多GC,但是当它做的时候,它的性能受到了很大的影响。
我可以强制hotspot频繁地创建较小的GC,而不是几个大量的长GC吗?
发布于 2012-04-04 20:07:36
您可以尝试将GC更改为并行或并发。这里有一个文档的链接。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
发布于 2012-04-04 20:18:24
干扰GC被调用的时间通常不是一个好主意。如果你在gc的性能上有问题,一个更好的方法是调整eden,survivor和旧空间的大小。
如果必须进行完全扫描,那么调用频率并不重要,速度将始终相对较慢,唯一快速的gc调用是在eden和survivor空间中的调用。
因此,增加eden和survivor空间可能会解决您的问题,但不幸的是,一个好的内存分析相当耗时且复杂。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (从其他答案窃取的链接)也提供了必要时如何配置的选项。-XX:NewRatio=2或-XX:NewRatio=3可能会提高您的速度,但也可能会减慢速度。不幸的是,这非常依赖于应用程序。
发布于 2012-04-04 20:16:45
您可以通过以下命令告诉JVM以编程方式执行垃圾收集:System.gc()。请注意,Javadoc说这只是一个建议。您可以尝试在进入不想要GC性能损失的临界区之前调用此函数。
https://stackoverflow.com/questions/10010738
复制相似问题