问题引入:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,,其最小内存值和Survivor区总大小分别是(10240m 2048m);
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmn:年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
JVM内存分配规则
堆内存分配:
JDK8 默认的,新生代(Young)与老年代的比例值为 1:2(该值可以通过参数 -XX:NewRatio来指定)。
新生代分为 Eden和两个Survior区域,分别被命名为from和to,以示区分。
默认的,Eden:from:to = 8:1:1(可以通过参数-XX:SurvivorRatio来设定)。
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配:
-XX:PermSize 256MB
-XX:MaxPermSize 256MB
JVM使用-XX:PermSize来设置非堆内存初始值,默认是物理内存的 1/64
由-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4
非堆内存分为
Perm Gen 永久代
JVM Stack Java 虚拟机栈
Local Method Stack 本地方法栈