java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xms (設置初始化的java堆大小) -Xmx (設置java堆最大內存大小) -Xss (單個線程佔用的棧大小) -Xmn (年輕代的大小)java
-XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:設置年輕代年輕代中Eden區與Survivor區的大小比值。設置爲4,則兩個Survivor區與一個Eden區的比值爲2:4,一個Survivor區佔整個年輕代的1/6 -XX:MaxPermSize=16m:設置(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置爲4,則年輕代與年老代所佔比值爲1:4,年輕代佔整個堆棧的1/5 -XX:SurvivorRatio=4:設置持久代大小爲16m。 -XX:MaxTenuringThreshold 設置通過多少代回收升至年老代vim
JVM給了三種選擇:串行收集器、並行收集器、併發收集器,可是串行收集器只適用於小數據量的狀況,因此這裏的選擇主要針對並行收集器和併發收集器。默認狀況下,JDK5.0之前都是使用串行收集器,若是想使用其餘收集器須要在啓動時加入相應參數。JDK5.0之後,JVM會根據當前系統配置進行判斷。併發
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
-XX:+UseParallelGC:選擇垃圾收集器爲並行收集器。此配置僅對年輕代有效。即上述配置下,年輕代使用併發收集,而年老代仍舊使用串行收集。 -XX:ParallelGCThreads=20:配置並行收集器的線程數,即:同時多少個線程一塊兒進行垃圾回收。此值最好配置與處理器數目相等。jvm
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
-XX:+UseParallelOldGC: 配置年老代垃圾收集方式爲並行收集。JDK6.0支持對年老代並行收集。性能
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
-XX:+UseAdaptiveSizePolicy:設置此選項後,並行收集器會自動選擇年輕代區大小和相應的Survivor區比例,以達到目標系統規定的最低相應時間或者收集頻率等,此值建議使用並行收集器時,一直打開。測試
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC:設置年老代爲併發收集。spa
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction:因爲併發收集器不對內存空間進行壓縮、整理,因此運行一段時間之後會產生「碎片」,使得運行效率下降。此值設置運行多少次GC之後對內存空間進行壓縮、整理。 -XX:+UseCMSCompactAtFullCollection:打開對年老代的壓縮。可能會影響性能,可是能夠消除碎片線程
-XX:+PrintGC : 打印GC -XX:+PrintGCDetails : 詳細一點的信息 -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期間程序暫停的時間。 -Xloggc:filename:與上面幾個配合使用,把相關日誌信息記錄到文件以便分析。
例如一個使用示例 :unix
[root@xx jvm測試]# java -XX:+PrintGCDetails -Xloggc:jvmLog.txt DynamicDispatch man say hello woman say hello woman say hello [root@xx jvm測試]# ls 'DynamicDispatch$Human.class' 'DynamicDispatch$Woman.class' DynamicDispatch.java hs_err_pid14941.log StaticResolution.class 'DynamicDispatch$Man.class' DynamicDispatch.class hello.jar jvmLog.txt StaticResolution.java [root@xx jvm測試]# vim jvmLog.txt
Full GC日誌:
jvm 調優的參數主要從如下幾個方面 :