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

Java 增加maxpermsize和最大堆大小的副作用,java,jvm,Java,Jvm,有人能解释一下增加maxpermsize和max heap size的副作用吗 我知道有时候,当我们遇到outofmemory问题时,我们会增加-Xmx。但我只是想知道,当我们增加-Xmx时,是否有任何副作用需要记住。增加maxpermsize如何影响运行时 谢谢。简短回答 java堆的大小加倍,垃圾收集暂停的等待时间加倍,而当前JVM技术中,当堆的大小为Gb时,等待时间变为几秒。看来新发布的 长答案 MaxPermSize是永久生成堆的最大大小,该堆保存类的字节码,并与包含实际实例的对象堆保持

有人能解释一下增加maxpermsize和max heap size的副作用吗

我知道有时候,当我们遇到outofmemory问题时,我们会增加-Xmx。但我只是想知道,当我们增加-Xmx时,是否有任何副作用需要记住。增加maxpermsize如何影响运行时


谢谢。

简短回答

java堆的大小加倍,垃圾收集暂停的等待时间加倍,而当前JVM技术中,当堆的大小为Gb时,等待时间变为几秒。看来新发布的

长答案

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

设置最大堆大小时必须考虑应用程序类和实例需要多少内存、服务器的总内存以及其他应用程序需要的内存

另一个重要的一点是,从最小堆大小((-Xms))扩展内存是一项代价高昂的操作。特别是在金融应用中,这可能意味着延迟。对于类似的实时需求,最好将-Xms和-Xmx设置为相同的值

下面的谈话可能会引起兴趣

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

因此,对于当前的JVM技术,您希望将堆设置得足够大,以运行应用程序,但不要太大。找到正确大小的一种方法是,将其设置为可能的最大值,然后将其切成两半,然后继续切成两半,直到发现问题为止。如果发现问题,则将上次找到的值加倍,并将其作为生产所选的堆大小

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

最后,这里有一些示例设置供参考:

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

通过更改以下设置解决此问题。 文件-->选项-->信任中心-->信任中心设置-->外部内容-->为所有工作簿链接启用自动更新


--谢谢

谢谢您的参考示例!复制粘贴由于某种原因(虚拟机)对我不起作用,对于那些可能想知道为什么它不起作用的人来说。@Fico也许你的虚拟机堆上没有足够的空间来复制粘贴?