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