一、heap size
1、 -Xmx
指定jvm的最大堆大小,默認(MaxHeapFreeRatio參數可以調整)空余堆內存大於70%時,JVM就會減少堆直到-Xms的最小限制
2、 -Xms
指定jvm的初始堆大小
默認(MinHeapFreeRatio參數可以調整)空余堆內存小於40%時,JVM就會增大堆直到-Xms的最大限制, 高並發應用,建議和-Xmx一樣,防止因為內存收縮或突然增大帶來的性能影響
3、-Xmn
指定jvm的最小堆大小
此處的大小是(eden + 2 survivor space),與jmap -heap中顯示的New gen是不同的
整個堆大小=年輕代大小 + 年老代大小,增大年輕代后,將會減小年老代大小,此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8
4、 -XX:NewSize
設置年輕代大小
5、 -XX:MaxNewSize
設置年輕代最大值
6、-XX:PermSize
設置jvm中Perm Generation的初始值
7、-XX:MaxPermSize
設置Perm Generation的最大值
8、-Xss
指定線程棧大小
一般小的應用,如果棧不是很深,應該是128k夠用的,大的應用建議使用256k,這個參數對性能的影響比較大
9、-XX:NewRatio
年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)
-XX:NewRatio=4表示年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5
10、-XX:SurvivorRatio
指定New Generation中Eden Space與一個Survivor Space的heap size比例,-XX :SurvivorRatio=8,那么在總共New Generation為10m的情況下,Eden Space為8m
11、-XX:MinHeapFreeRatio=<n>
指定jvm heap在使用率小於n的情況下,heap進行收縮,Xmx==Xms的情況下無效,如-XX:MinHeapFreeRatio=30
12、 -XX:MaxHeapFreeRatio=<n>
指定jvm heap在使用率大於n的情況下,heap進行擴張,Xmx==Xms的情況下無效,如-XX:MaxHeapFreeRatio=70
13、 -XX:LargePageSizeInBytes
指定java heap分頁頁面大小,如:-XX:LargePageSizeInBytes=128m,
內存頁的大小不可設置過大,會影響Perm的大小
14、-XX:+DisableExplicit GC
含義是關閉 System.gc(),這個函數需要嚴格的測試
15、-XX:MaxTenuringThreshold
垃圾最大年齡,指定一個object在經歷了n次young gc后轉移到old generation區,默認值是15
16、-XX:+UseBiasedLocking
鎖機制的性能改善
17、-Xnoclassgc
禁用垃圾回收
18、-XX:PretenuringSizeThreshold
對象超過多大是直接在老生代分配,單位字節,新生代采用Parallel Scavenge GC時無效,另一種直接在老生代分配的情況是大的數組對象,且數組中無外部引用對象
19、-XX:TLABWasteTargetPercent
TLAB在Eden區的百分比,默認值是1%
20、-XX:+CollectGenOFirst
FULLGC時是否先YGC,默認值是false
二、garbage collector
1、-XX:+UseParallelGC
FULL GC采用parallel collector,並行收集
2、 -XX:+UseParNewGC
設置年輕代為並行收集,指定在New Generation使用 parallel collector,是Use Parallel GC的gc的升級版本,有更好的性能或者優點,可以和CMS gc一起使用
3、-XX:ParallelGC Threads
並行收集器的線程數,指定parallel collection時啟動的thread個數,默認是物理processor的個數
4、-XX:+UseParallelOldGC
年老代垃圾收集方式為並行收集,指定在Old Generation使用parallel collector
5、-XX:MaxGCPauseMillis
每次年輕代垃圾回收的最長時間(最大暫停時間),如果無法滿足此時間,JVM會自動調整年輕代大小,以滿足此值
6、 -XX:+UseAdaptiveSizePolicy,自動選擇年輕代區大小和相應的Survivor區比例
7、 -XX:GCTimeRatio
設置垃圾回收時間占程序運行時間的百分比
8、 -XX:+ScavengeBeforeFULLGC
FULLGC前調用YGC,默認值為true
三、CMS相關參數
1、-XX:+UseConcMarkSweepGC
使用CMS內存收集
2、 -XX:+AggressiveHeap
試圖是使用大量的物理內存長時間大內存使用的優化,能檢查計算資源,至少需要256MB內存,大量的CPU
3、 -XX:+CMSFullGCsBeforeCompaction
多少次后進行內存壓縮,由於並發收集器不對內存空間進行壓縮,整理,所以運行一段時間以后會產生“碎片”,使得運行效率降低,此值設置運行多少次GC以后對內存空間進行壓縮,整理
4、-XX:+CMSParallelRemarkEnabled
降低標記停頓
5、-XX:+UseCMSCompactAtFullCollection
FULLGC的時候,對年老代的壓縮,CMS是不會移動內存的,這個非常容易產生碎片,導致內存不夠用,因此內存壓縮這個時候就會被啟用,增加這個參數是個好習慣,可能會影響性能,但是可以消除碎片
6、-XX:+UseCMSInitiatingOccupancyOnly
使用手動定義初始化定義開始CMS收集
7、-XX:CMSInitiatingOccupancyFraction=70
使用CMS作為垃圾回收,使用70%后開始CMS收集
8、 -XX:CMSInitiatingPermOccupancyFraction
設置Perm Generation使用到達多少比率時觸發,默認值92%
9、 -XX:+CMSIncrementalMode
設置為增量模式,用於單CPU情況
四、輔助信息
1、-XX:+PrintGCDetails
打印垃圾收集的情況
2、-XX:+PrintGCTimeStamps
打印垃圾收集的時間情況
3、-XX:+PrintGCApplicationStoppedTime
打印垃圾回收期間程序暫停的時間
4、 -XX:+PrintGCApplicationConcurrentTime
打印每次垃圾回收前,程序未中斷的執行時間
5、 -XX:+PrintHeapAtGC
打印GC前后的詳細堆棧信息
6、-Xloggc:filename
把相關日志信息記錄到文件以便分析
7、 -XX:+PrintTLAB
查看TLAB空間的使用情況
8、 -XX:+PrintTenuringDistribution
查看每次minor GC后新的存活周期的閥值
9、 -XX:+PrintClassHistogram
garbage collects before printing the histogram
10、 -XX:+UseFastAccessorMethods
get,set方法轉成本地代碼