一、java 虛擬機一些參數
-Dosgi.requiredJavaVersion=1.5 // -D表示設置property 參數,在java代碼裏面就可以使用System.getProperties("osgi.requiredJavaVersion")獲取這個值
-Xverify:none //加載代碼的時候不進行驗證,信任代碼的情況下使用,如eclipse啓動時可以加這個參數,加快啓動速度
-verbose:gc
-Xms512m
-Xmx512m
-Xmn128m //Yong(年輕代)的初始大小,一般Xms的1/4
-XX:+UseConcMarkSweepGC //使用CMS垃圾收集器收集老年代
-XX:+PrintGCDetails //輸出GC日誌
-XX:+PrintGCDateStamps
-Xloggc:gc.log //gc日誌輸出,可以指定路徑
-XX:PermSize=64m //永久代的初始大小
-XX:MaxPermSize=64m
-XX:+DisableExplicitGC //禁用System.gc()調用
二、加上如上參數後打印的日誌
2012-11-15T16:57:06.118+0800: 2.089: [GC 2.089: [ParNew: 104960K->13056K(118016K), 0.1720037 secs] 104960K->48670K(511232K), 0.1721610 secs] [Times: user=0.28 sys=0.01, real=0.17 secs]
2012-11-15T16:57:07.618+0800: 3.583: [GC 3.583: [ParNew: 117987K->13056K(118016K), 0.0986891 secs] 153601K->64983K(511232K), 0.0988357 secs] [Times: user=0.14 sys=0.01, real=0.09 secs]
2012-11-15T16:57:10.696+0800: 6.669: [GC 6.669: [ParNew: 118016K->13056K(118016K), 0.0685054 secs] 169943K->78453K(511232K), 0.0686582 secs] [Times: user=0.14 sys=0.00, real=0.08 secs]
2012-11-15T16:57:12.524+0800: 8.490: [GC 8.490: [ParNew: 118016K->11244K(118016K), 0.0525525 secs] 183413K->83007K(511232K), 0.0527229 secs] [Times: user=0.08 sys=0.00, real=0.05 secs]
以其中一例分析:
2012-11-15T16:57:12.524+0800: 8.490: [GC 8.490: [ParNew: 118016K->11244K(118016K), 0.0525525 secs] 183413K->83007K(511232K), 0.0527229 secs] [Times: user=0.08 sys=0.00, real=0.05 secs]
8.490 :表示虛擬機啓動運行到8.490秒是進行了一次monor Gc ( not Full GC)
ParNew :表示對年輕代進行的GC,使用ParNew 收集器
118016K->11244K(118016K) :118016K 年輕代收集前大小,11244K 收集完以後的大小 , 118016K 當前年輕代分配的總大小
0.0525525 secs :表示對年輕代進行垃圾收集是,用戶線程暫停的時間,即此次年輕代收集花費的時間
183413K->83007K(511232K) :JVM heap堆收集前後heap堆內存的變化
0.0527229 secs :整個JVM此次垃圾造成用戶線程的暫停時間。
更全一點的參數說明:
[GC [<collector>: <starting occupancy1> -> <ending occupancy1>, <pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3> secs] <collector> GC收集器的名稱 <starting occupancy1> 新生代在GC前佔用的內存 <ending occupancy1> 新生代在GC後佔用的內存 <pause time1> 新生代局部收集時jvm暫停處理的時間 <starting occupancy3> JVM Heap 在GC前佔用的內存 <ending occupancy3> JVM Heap 在GC後佔用的內存 <pause time3> GC過程中jvm暫停處理的總時間