一 堆大小设置
JVM 中最大堆大小有三方面限制:
a. 操作系统的数据模型(32-bt还是64-bit)限制;
b. 系统的可用虚拟内存限制;
c. 系统的可用物理内存限制
典型设置:
1. java -Xmx2048m -Xms2048m -Xmn1g -Xss128k
- xms 指定程序的初始化内存大小
- xmx 指定程序占用的最大内存
Xmn 设置年轻代大小
整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
Xss 设置每个线程的堆栈大小
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
2. java -Xmx2048m -Xms2048m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
XX:NewRatio 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
XX:SurvivorRatio 设置年轻代中Eden区与Survivor区的大小比值
设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
XX:MaxPermSize 设置持久代大小
XX:MaxTenuringThreshold 设置垃圾最大年龄
三 辅助信息
- -XX:+PrintGC
输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs] - -XX:+PrintGCDetails
输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs] - -XX:+PrintGCTimeStamps
- XX:+PrintGC:PrintGCTimeStamps
可与-XX:+PrintGC -XX:+PrintGCDetails混合使用
输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs] -XX:+PrintTLAB
查看TLAB空间的使用情况XX:+PrintTenuringDistribution
Desired survivor size 1048576 bytes, new threshold 7 (max 15)
new threshold 7即标识新的存活