在阅读一些关于性能调优的笔记时,我确实注意到了在设置内存大小时的建议:
Java 应用程序应将初始和最大永久代大小调整为相同的值,因为增长或收缩永久代空间需要完整的 GC。在设置堆大小时给出了类似的建议,即-Xmx=-Xms
。
我的问题是,那我们为什么要设置 -Xms 呢?
此外, 如果 -Xmx 和 -Xms 的值不同,而不是 -Xmx 和 -Xms 的大小相同,为什么会经常触发 GC。
在我的第二个问题中添加更多内容,如果我从最小堆大小 64M 和最大 512M 开始,我相信除非我的应用程序使用的内存达到 512M,否则不会触发完整 GC。
同样,如果我从 -Xmx 和 -Xms 的 512M 开始,当我的应用程序内存使用达到此限制时,JVM 仍然会触发完全 GC。那么为什么建议将 max 和 min 设置为相同的值呢?