-XX:最大PermSize有或没有-XX:PermSize

2022-08-31 19:53:51

我们遇到了一个 Java.lang.OutOfMemoryError: PermGen 空间错误,并查看了 tomcat JVM 参数,除了我们指定的 和 参数之外。经过一些分析,我可以看到PermGen空间偶尔会发生垃圾回收,从而避免它满载运行。-Xms-Xmx-XX:MaxPermSize=128m

我的问题是:除了增加之外,如果我也指定,会有什么区别?我知道总内存将是Xmx + maxPermSize,但是还有其他原因为什么在指定时不应该存在吗?-XX:MaxPermSize-XX:PermSize-XX:PermSize-XX:MaxPermSize

如果您有处理这些JVM参数的实际经验,请分享。

JVM 是 HotSpot 64 位服务器 VM 内部版本 16.2-b04


答案 1

-XX:PermSize指定在 JVM 启动期间将分配的初始大小。如有必要,JVM 将最多分配到 。-XX:MaxPermSize


答案 2

通过使用参数,您可以调整应用程序启动的性能。我最近没有看过它,但是几年前的默认值是32MB(我认为),如果你的应用程序需要更多,它会触发一些填充内存的周期 - 完整的垃圾回收 - 增加内存等,直到它加载了它所需要的一切。此周期可能对启动性能有害,因此立即分配所需的数量可以改善启动。-XX:PermSize-Xms-Xms

类似的周期也适用于永久生成。因此,调整这些参数可以改善启动(以及其他参数)。

警告在分配内存,划分伊甸园空间和老一代等时,JVM具有很多优化和智能,因此不要做等于或等于之类的事情,因为它会删除JVM可以应用于其分配策略的一些优化,从而降低应用程序性能而不是改进它。-Xms-Xmx-XX:PermSize-XX:MaxPermSize

与往常一样:进行不平凡的测量,以证明您的更改确实提高了整体性能(例如,在使用应用程序期间,缩短启动时间可能对性能造成灾难性影响)


推荐