Xms : 最小堆
Xmx : 最大堆 (一般和Xms配置成一样以避免每次gc后JVM重新分配内存,扩容消耗)
Xmn: 年轻代内存大小,整个JVM内存=年轻代 + 年老代 + 持久代
Xss : 栈大小
XX:PermSize:最小永久代
XX:MaxPermSize: 最大永久代 (JDK 1.8:XX:MetaspaceSize,XX:MaxMetaspaceSize)
如果发生oom(out of menery)异常时,排除法如下:
1、看gc日志,如果为永久代容量不足,则扩大年老代的容量。(JDK1.6之前)
2、看gc日志,如果为old代容量不足,则可以适当调大。查看是否有内存溢出,即对象逃逸。
3、看日志,如果yong gc 多次,则可以扩大yong代容量。
堆的分配:
1、年老代,默认占用整个堆的2/3
2、年轻代,默认占用整个堆的1/3
eden默认占用年轻代的4/5
s1占用年轻代的1/10
s2占用年轻代的1/10
元数据取代了堆空间中的年老代(方法区),元数据区和永久代本质上都是方法区的实现。方法区存放虚拟机加载的类信息,静态变量,常量等数据。
运行内存划分图: