首先,是一张堆的示意图。
第一节讲过,其实java堆和方法区并不是一个东西,为什么我要把方法区放在堆的示意图中呢。因为大家将堆的时候,通常说的都是方法区和java堆。方法区和java堆都是线程共享的,都需要经过GC,所以我个人认为,通常说堆涵盖了方法区和java堆两项。
方法区与整个堆内存的配置无关。-Xmx,-Xms参数只包含了老年代和新生代,并不包括方法区。
-Xmx:配置最大堆内存。
-Xms:配置初始化堆内存
-Xmn 用于设置新生代的大小。新生代大小一般设置为整个堆空间的1/3到1/4之间。(-Xmn1m)
-XX:SurvivorRatio=eden/from=eden/to 设置新生代中eden空间和from/to空间的比例关系。
(-XX:SurvivorRatio=2 新生代内存有10m,那么eden区的内存即为5m)
-XX:NewRatio=老年代/新生代 设置新生代和老年代的比例(与-Xmn区别是一个是设置新生代绝对大小,一个是根据比例设置)
方法区(理解为永久区perm,在jdk1.6和1.7中存在,在1.8中剔除):
-XX:PermSize:初始化方法区。
-XX:MaxPermSize:最大方法区:默认情况为64M