我当前的应用程序运行在2 GC内存上,正常的GC周期。
我想将JVM内存增加到4 4GB,以提高应用程序性能。
它会增加GC时间吗?如果是,性能将受到多大影响。他们有没有好的文章来调优GC?
发布于 2011-06-07 23:05:46
Short Answer
是的,时间会增加。更大的堆=更长的暂停时间
Long Answer
有几个因素需要考虑。你是如何配置你的GC运行的?你的年轻一代有多大?你多久会看到一次完整的GC?
如果你很少看到完整的GC,那么差异将是微不足道的。如果您将GC活动记录到日志中,您可以看到部分GC的暂停时间非常快。在部分GC上,2 4GB和4 4GB之间的差异约为0.1s。要记录GC活动,可以使用以下参数-XX:+PrintGCDetails -verbose:gc -Xloggc:/log/path/gc.log
。有很多工具可以为你读取GC日志,提供图表和统计数据,如吞吐量和总暂停时间。
如果您经常看到满GC,这就是您想要添加更多内存的原因,那么您可能需要考虑分析应用程序,以查看是什么占用了所有内存。使用更大的堆,这些问题只会导致更长的GC,直到您修复了底层问题。
最后,您需要尝试各种配置,正确测试并将最适合您的配置放入您的生产环境中。
发布于 2011-06-07 22:53:00
大型堆==长时间GC暂停。
我已经看到GC在大约10G大小的堆上停止了几分钟。
另一方面,较小的堆意味着更频繁(但占用时间更短)的GC周期。这个问题没有很好的通用答案--这完全取决于你的应用程序的需求(高频交易应用程序?kitten webserver?)、硬件、对象搅动等。
关于这个主题,有几个很好的资源可以阅读:
发布于 2011-06-07 22:46:06
没有直接的答案,因为答案取决于你的应用程序在内存方面做了什么。
但是,您应该考虑到,如果您增加了jvm内存,那么您的应用程序将有更多的内存...如果所有的内存都被使用了,那么你的gc会被更频繁地调用(增加了GC时间)
增加内存并不总是最好的解决方案,优化对象使用并回收未使用的对象可能是更好的解决方案。
https://stackoverflow.com/questions/6266860
复制相似问题