gpt4 book ai didi

java - 增加 maxpermsize 和最大堆大小的副作用

转载 作者:IT老高 更新时间:2023-10-28 20:57:05 25 4
gpt4 key购买 nike

谁能解释增加 maxpermsize 和 max heap size 的副作用?

我知道有时,当我们遇到内存不足问题时,我们会增加 -Xmx。但我只是想知道当我们增加 -Xmx 时是否需要记住任何副作用。以及增加 maxpermsize 对运行时有何影响?

谢谢。

最佳答案

简答

Java 堆大小加倍,垃圾收集暂停的等待时间加倍,在当前的 JVM 技术中,当堆为 Gb 顺序时,等待时间变为数秒。好像新发布的Java 7 is going to change that .

长答案

MaxPermSize 是永久代堆的最大大小,该堆保存类的字节码,并与包含实际实例的对象堆分开。对于 Web 应用程序要记住的一件事是,在每次热重新部署中,内存使用量会随着相同类的多个副本而增加。除非指定了 -XX:+CMSClassUnloadingEnabled。

最大堆大小 (-Xmx) 和 MaxPermSize 必须考虑到应用程序类和实例需要多少内存、服务器的总内存和其他所需的内存应用程序。

另一个重要的一点是,从 Min Heap Size (-Xms) 扩展内存是一项代价高昂的操作。尤其是在金融应用的情况下,这可能意味着延迟。对于类似的实时要求,最好将 -Xms 和 -Xmx 设置为相同的值。

以下谈话可能会引起您的兴趣http://www.infoq.com/presentations/Java-without-the-GC-Pauses

从演讲中您可以看出,将堆增加超过一定限制 2Gb、10Gb、100Gb 的副作用意味着垃圾收集的暂停时间更长,如果堆非常大,可能会停止一切几秒钟或一分钟.

由于当前 JVM 技术的原因,您希望将堆设置为足够大以运行您的应用程序,但又不能太大。一种找到正确大小的方法,可以将其设置为最大可能值,然后减半并继续减半直到发现问题,当你这样做时,将最后找到的值加倍并将其保持为所选堆大小用于生产。

这个建议当然适用于大堆,按 Gb 顺序,如果您的应用程序在 256Mb 内存下运行良好,我会保留该值而无需进一步调查。

最后,这里有一些示例设置供引用:

-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled

关于java - 增加 maxpermsize 和最大堆大小的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com