把xmx和xms设置一致可以让JVM在启动时就直接向OS申请xmx的commited内存,好处是:
1. 避免JVM在运行过程中向OS申请内存
2. 延后启动后首次GC的发生时机
3. 减少启动初期的GC次数
4. 尽可能避免使用swap space
总之:避免在生产环境由于heap内存扩大或缩小导致应用停顿,降低延迟,同时避免每次垃圾回收完成后JVM重新分配内存。
JVM垃圾回收的不足
当堆内存使用情况变化时,并不是单纯的扩大和缩小堆内存就完事了。在此之前还会执行GC(垃圾回收)操作。如果-Xms起初值设置的比较小,那么就频繁触发GC操作。当GC操作无法释放更多内存时,才会进行内存的扩充。
GC操作是需要耗时的,而且Full GC会引起“Stop the World”,也就是说会引起线程停止,不可避免就会引起性能问题。
虽然设置为相同值有很多好处,但也会有一些不足。比如,如果两个值一样,会减少GC的操作,也意味着只有当JVM即将使用完时才会进行回收,此前内存会不停的增长。