问题
-
明明指定了 Xms 和 Xmx 都是2048m,但是启动的时候并没有占用2个G
image.png
-
后来发现还有这么个JVM参数
-XX:+AlwaysPreTouch
-
具体的解释见链接
JAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题。
1、GC的时候,新生代的对象要晋升到老年代的时候,需要内存,这个时候操作系统才真正分配内存,这样就会加大young gc的停顿时间;
2、可能存在内存碎片的问题。
可以在JVM启动的时候,配置-XX:+AlwaysPreTouch
参数,
这样JVM就会先访问所有分配给它的内存,让操作系统把内存真正的分配给JVM.后续JVM就可以顺畅的访问内存了。
网友评论