JVM实用参数(三)打印所有XX参数及值
原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-3-printing-all-xx-flags-and-their-values/
譯者:李洪柱?????校對:方騰飛
本篇文章基于Java?6(update?21oder?21之后)版本,?HotSpot?JVM?提供給了兩個新的參數,在JVM啟動后,在命令行中可以輸出所有XX參數和值。
-XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial讓我們現在就了解一下新參數的輸出。以 -client 作為參數的 -XX:+PrintFlagsFinal? ?的結果是一個按字母排序的590個參數表格(注意,每個release版本參數的數量會不一樣)
$ java -client -XX:+PrintFlagsFinal Benchmark [Global flags] uintx AdaptivePermSizeWeight = 20 {product} uintx AdaptiveSizeDecrementScaleFactor = 4 {product} uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} uintx AdaptiveSizePausePolicy = 0 {product}[...] uintx YoungGenerationSizeSupplementDecay = 8 {product} uintx YoungPLABSize = 4096 {product}bool ZeroTLAB = false {product}intx hashCode = 0 {product}(校對注:你可以嘗試在命令行輸入上面的命令,親自實現下)
表格的每一行包括五列,來表示一個XX參數。第一列表示參數的數據類型,第二列是名稱,第四列為值,第五列是參數的類別。第三列”=”表示第四列是參數的默認值,而”:=” 表明了參數被用戶或者JVM賦值了。
注意對于這個例子我只是用了Benchmark類,因為這個系列前面的章節也是用的這個類。甚至沒有一個主類的情況下你能得到相同的輸出,通過運行java 帶另外的參數 -version.現在讓我們檢查下 server VM提供了多少個參數。我們也能指定參數-XX:+UnlockExperimentalVMOptions?和-XX:+UnlockDiagnosticVMOptions ;來解鎖任何額外的隱藏參數。
$ java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark724個參數,讓我們看一眼那些已經被賦值的參數。
$ java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark | grep ":" uintx InitialHeapSize := 57505088 {product} uintx MaxHeapSize := 920649728 {product} uintx ParallelGCThreads := 4 {product}bool PrintFlagsFinal := true {product}bool UseParallelGC := true {product}(校對注:這個命令非常有用)我們僅設置一個自己的參數 -XX:+PrintFlagsFinal。其他參數通過server VM基于系統設置的,以便以合適的堆大小和GC設置運行。
如果我們只想看下所有XX參數的默認值,能夠用一個相關的參數,-XX:+PrintFlagsInitial ?。 用?-XX:+PrintFlagsInitial, 只是展示了第三列為“=”的數據(也包括那些被設置其他值的參數)。
然而,注意當與-XX:+PrintFlagsFinal 對比的時候,一些參數會丟失,大概因為這些參數是動態創建的。
研究表格的內容是很有意思的,通過比較client和server VM的行為,很明顯了解哪些參數會影響其他的參數。有興趣的讀者,可以看一下這篇不錯文章Inspecting HotSpot JVM Options。這個文章主要解釋了第五列的參數類別。
-XX:+PrintCommandLineFlags讓我們看下另外一個參數,事實上這個參數非常有用:?-XX:+PrintCommandLineFlags。這個參數讓JVM打印出那些已經被用戶或者JVM設置過的詳細的XX參數的名稱和值。
換句話說,它列舉出?-XX:+PrintFlagsFinal的結果中第三列有":="的參數。以這種方式,我們可以用-XX:+PrintCommandLineFlags作為快捷方式來查看修改過的參數。看下面的例子。
$ java -server -XX:+PrintCommandLineFlags Benchmark -XX:InitialHeapSize=57505088 -XX:MaxHeapSize=920081408 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+UseParallelGC現在如果我們每次啟動java 程序的時候設置 -XX:+PrintCommandLineFlags 并且輸出到日志文件上,這樣會記錄下我們設置的JVM 參數對應用程序性能的影響。類似于 -showversion(見 Part1),我建議 –XX:+PrintCommandLineFlags 這個參數應該總是設置在JVM啟動的配置項里。因為你從不知道你什么時候會需要這些信息。
奇怪的是在這個例子中,通過?-XX:+PrintCommandLineFlags 列出堆的最大值會比通過-XX:+PrintFlagsFinal列舉出的相應值小一點。如果誰知道兩者之間不同的原因,請告訴我。
原創文章,轉載請注明:?轉載自并發編程網 – ifeve.com本文鏈接地址:?JVM實用參數(三)打印所有XX參數及值
總結
以上是生活随笔為你收集整理的JVM实用参数(三)打印所有XX参数及值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM实用参数(二)参数分类和即时(JI
- 下一篇: JVM实用参数(五)新生代垃圾回收