java -XX:+PrintCommandLineFlags -versionjava
jinfo -flags PID 查看 “Non-default VM flags:” 中的信息
算法
发现:
默认下是 -XX:+UseParallelGC : 新生代并发收集,老年代串行收集。多线程
新生代(别名) | 老年代 | JVM 参数 |
---|---|---|
Serial (DefNew) | Serial Old(PSOldGen) | -XX:+UseSerialGC |
Parallel Scavenge (PSYoungGen) | Serial Old(PSOldGen) | -XX:+UseParallelGC |
Parallel Scavenge (PSYoungGen) | Parallel Old (ParOldGen) | -XX:+UseParallelOldGC |
ParNew (ParNew) | Serial Old(PSOldGen) | -XX:-UseParNewGC |
ParNew (ParNew) | CMS(PSOldGen) | -XX:+UseConcMarkSweepGC |
G1 | G1 | -XX:+UseG1GC |
[GC[ParNew: 78656K->8703K(78656K), 0.0180555 secs] 81048K->17429K(253440K), 0.0187828 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
[Full GC [PSYoungGen: 4032K->0K(145920K)] [ParOldGen: 164500K->138362K(246272K)] 168532K->138362K(392192K) [PSPermGen: 67896K->67879K(136192K)], 1.006
-XX:+UseFastaccessorMethods :
原始类型优化并发
[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
[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]
11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间。可与上面混合使用app
Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC 打印GC先后的详细堆栈信息jvm
34.702: [GC {Heap before gc invocations=7: def new generation total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000) eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bd0000) from space 6144K, 55% used [0x221d0000, 0x22527e10, 0x227d0000) to space 6144K, 0% used [0x21bd0000, 0x21bd0000, 0x221d0000) ...
-Xloggc:filename 指定log输出文件性能
eg优化
java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0-Xmx3550m:设置JVM最大可用内存为3550M。spa
-Xms3550m:设置JVM初始内存为3550m。此值能够设置与-Xmx相同,以免每次垃圾回收完成后JVM从新分配内存。操作系统
-Xmn2g:设置年轻代大小为2G。整个堆大小= 年轻代大小 + 年老代大小 + 持久代大小。持久代通常固定大小为64m,因此增大年轻代后,将会减少年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每一个线程的堆栈大小。JDK5.0之后每一个线程堆栈大小为1M,之前每一个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减少这个值能生成更多的线程。可是操做系统对一个进程内的线程数仍是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:NewRatio=4: 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。若是设置为0的话,则年轻代对象不通过Survivor区,直接进入年老代。对于年老代比较多的应用,能够提升效率。若是将此值设置为一个较大值,则年轻代对象会在Survivor区进行屡次复制,这样能够增长对象再年轻代的存活时间,增长在年轻代即被回收的概论。