概念解释: -Xms: 初始堆大小 默认物理内存的 1/64(小于1GB) 空余堆大小小于 40% 时,JVM就会增大堆直到 -Xmx 的最大限制 -Xmx: -Xmx 最大堆大小 默认物理内存的 1/4(小于1GB) 空余堆大小大于 70% 时,JVM就会减少堆直到 -Xms 的最小限制 JVM垃圾回收的不足: 当堆内存使用情况变化时,并不是单纯的扩大和缩小堆内存就完事了。在此之前还会执行GC(垃圾回收) *** 作。 如果 -Xms 起初值设置的比较小,那么就会频繁触发GC *** 作。当GC *** 作无法释放更多内存时,才会进行内存的扩充。 我们都知道GC *** 作是需要耗时的,而且Full GC会引起“Stop the World”,也就是说会引起线程停止,不可避免就会引起性能问题。 相同值的好处: 面对上面的问题,为了避免在生产环境由于heap内存扩大或缩小导致应用停顿,降低延迟, 同时避免每次垃圾回收完成后JVM重新分配内存。所以,-Xmx和-Xms一般都是设置相等的。 当然,如果生产系统上线前有一段预热时间的话,也可以不设置相等。对于需要高吞吐量的应用来说,可以不在乎这种停顿, 比如一些后台的应用之类,那么内存可以适当调大一些。(停顿时间越长,吞吐量反而越大),需要根据具体情况权衡。 把两者设置为一致,是为了避免频繁扩容和GC释放堆内存造成的系统开销/压力 注意事项: 其实虽然设置为相同值有很多好处,但也会有一些不足。比如,如果两个值一样,会减少GC的 *** 作, 也意味着只有当JVM即将使用完时才会进行回收,此前内存会不停的增长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)