Young Generation | 即图中的Eden + From Space + To
Space 1.Eden存放新生的对象 2.Survivor Space有两个,存放每次垃圾回收后存活的对象 |
Old Generation | Tenured Generation 即图中的Old
Space 主要存放应用程序中生命周期长的存活对象 |
Permanent Generation | 即图中的Permanent
Space 存放JVM自己的反射对象,比如类对象和方法对象 |
native heap | JVM内部处理或优化 |
-Xms/-Xmx | 定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。 | 默认是物理内存的1/64但小于1G。 | 在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。 |
-XX:NewSize/-XX:MaxNewSize | 定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。 | 默认是物理内存的1/4但小于1G。 | 在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。 |
-Xmn | 设置young generation的内存大小。 | 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 | |
-XX:PermSize/-XX:MaxPermSize | 定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。 | 在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。 | |
-XX:NewRaito | 设置YOUNG与OLD段的比值。 | ||
-XX:SurvivorRaito | 设置YOUNG段中Eden区与Survivor区的比值,如此值为4,则Eden为4/6,两个Survivor分别为1/6。 | ||
-XX:MaxTenuringThreshold | 设置垃圾最大年龄。 | 如果设置为0的话,则新生对象不经过Survivor区,直接进入OLD段。对于OLD对象比较多的应用,可以提高效率。如果将此值设置为一个较大值,则 新生对象会在Survivor区进行多次复制,这样可以增加对象的存活时间,增加在minor collection即被回收的概率。 | |
-Xss | 设置栈的大小。 | JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。 | 在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 |
-XX:+UseParallelGC | 选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。 | ||
-XX:ParallelGCThreads | 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。 | 此值最好配置与处理器数目相等。 | |
-XX:+UseParallelOldGC | 配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。 | ||
-XX:MaxGCPauseMillis | 设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。 | ||
-XX:+UseAdaptiveSizePolicy | 设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等。 | 此值建议使用并行收集器时,一直打开。 |
MEM_ARGS="-Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=6"
上例中,
YOUNG+OLD: 512M
YOUNG: 256M
Perm: 128M
Eden:
YOUNG*6/(6+1+1)=192M
单个Survivor: YOUNG/(6+1+1)=32M
《深入Java虚拟机学习笔记》- 第9章 垃圾收集,布布扣,bubuko.com
原文:http://www.cnblogs.com/duanxz/p/3724404.html