1. 程式人生 > >JAVA啟動引數大全之三:非Stable引數

JAVA啟動引數大全之三:非Stable引數

 前面我們提到用-XX作為字首的引數列表在jvm中可能是不健壯的,SUN也不推薦使用,後續可能會在沒有通知的情況下就直接取消了;但是由於這些引數中的確有很多是對我們很有用的,比如我們經常會見到的-XX:PermSize、-XX:MaxPermSize等等;

下面我們將就Java HotSpot VM中-XX:的可配置引數列表進行描述;
這些引數可以被鬆散的聚合成三類:
行為引數(Behavioral Options):用於改變jvm的一些基礎行為;
效能調優(Performance Tuning):用於jvm的效能調優;
除錯引數(Debugging Options):一般用於開啟跟蹤、列印、輸出等jvm引數,用於顯示jvm更加詳細的資訊;

由於sun官方文件中對各引數的描述也都非常少(大多隻有一句話),而且大多涉及OS層面的東西,很難描述清楚,所以以下是挑選了一些我們開發中可能會用得比較多的配置項,若需要檢視所有引數列表,可以點選HotSpot VM Specific Options.檢視原文;

首先來介紹行為引數
 

引數及其預設值 描述
-XX:-DisableExplicitGC 禁止呼叫System.gc();但jvm的gc仍然有效
-XX:+MaxFDLimit 最大化檔案描述符的數量限制
-XX:+ScavengeBeforeFullGC 新生代GC優先於Full GC執行
-XX:+UseGCOverheadLimit 在丟擲OOM之前限制jvm耗費在GC上的時間比例
-XX:-UseConcMarkSweepGC 對老生代採用併發標記交換演算法進行GC
-XX:-UseParallelGC 啟用並行GC
-XX:-UseParallelOldGC 對Full GC啟用並行,當-XX:-UseParallelGC啟用時該項自動啟用
-XX:-UseSerialGC 啟用序列GC
-XX:+UseThreadPriorities 啟用本地執行緒優先順序

















上面表格中黑體的三個引數代表著jvm中GC執行的三種方式,即序列、並行、併發
序列(SerialGC)是jvm的預設GC方式,一般適用於小型應用和單處理器,演算法比較簡單,GC效率也較高,但可能會給應用帶來停頓;
並行(ParallelGC)是指GC執行時,對應用程式執行沒有影響,GC和app兩者的執行緒在併發執行,這樣可以最大限度不影響app的執行;
併發(ConcMarkSweepGC)是指多個執行緒併發執行GC,一般適用於多處理器系統中,可以提高GC的效率,但演算法複雜,系統消耗較大;


效能調優引數列表:

 

引數及其預設值 描述
-XX:LargePageSizeInBytes=4m 設定用於Java堆的大頁面尺寸
-XX:MaxHeapFreeRatio=70 GC後java堆中空閒量佔的最大比例
-XX:MaxNewSize=size 新生成物件能佔用記憶體的最大值
-XX:MaxPermSize=64m 老生代物件能佔用記憶體的最大值
-XX:MinHeapFreeRatio=40 GC後java堆中空閒量佔的最小比例
-XX:NewRatio=2 新生代記憶體容量與老生代記憶體容量的比例
-XX:NewSize=2.125m 新生代物件生成時佔用記憶體的預設值
-XX:ReservedCodeCacheSize=32m 保留程式碼佔用的記憶體容量
-XX:ThreadStackSize=512 設定執行緒棧大小,若為0則使用系統預設值
-XX:+UseLargePages 使用大頁面記憶體

















 

我們在日常效能調優中基本上都會用到以上黑體的這幾個屬性; 
 

除錯引數列表:

 

引數及其預設值 描述
-XX:-CITime 列印消耗在JIT編譯的時間
-XX:ErrorFile=./hs_err_pid<pid>.log 儲存錯誤日誌或者資料到檔案中
-XX:-ExtendedDTraceProbes 開啟solaris特有的dtrace探針
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定匯出堆資訊時的路徑或檔名
-XX:-HeapDumpOnOutOfMemoryError 當首次遭遇OOM時匯出此時堆中相關資訊
-XX:OnError="<cmd args>;<cmd args>" 出現致命ERROR之後執行自定義命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 當首次遭遇OOM時執行自定義命令
-XX:-PrintClassHistogram 遇到Ctrl-Break後列印類例項的柱狀資訊,與jmap -histo功能相同
-XX:-PrintConcurrentLocks 遇到Ctrl-Break後列印併發鎖的相關資訊,與jstack -l功能相同
-XX:-PrintCommandLineFlags 列印在命令列中出現過的標記
-XX:-PrintCompilation 當一個方法被編譯時列印相關資訊
-XX:-PrintGC 每次GC時列印相關資訊
-XX:-PrintGC Details 每次GC時列印詳細資訊
-XX:-PrintGCTimeStamps 列印每次GC的時間戳
-XX:-TraceClassLoading 跟蹤類的載入資訊
-XX:-TraceClassLoadingPreorder 跟蹤被引用到的所有類的載入資訊
-XX:-TraceClassResolution 跟蹤常量池
-XX:-TraceClassUnloading 跟蹤類的解除安裝資訊
-XX:-TraceLoaderConstraints 跟蹤類載入器約束的相關資訊


































當系統出現問題的時候,又不能使用外部跟蹤工具(比如JProfiler……)的情況下,以上的這些引數就會發揮重大作用了,比如dump堆資訊、列印併發鎖……

--------------------- 本文來自 sfdev 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/sfdev/article/details/2063928?utm_source=copy