全面輸出JVM配置引數

徐家三少發表於2017-04-27

有關java併發可以看這裡:
yuedu.baidu.com/ebook/d09e3…
Java 6(update 21oder 21之後)版本, HotSpot JVM 提供給了兩個新的引數,在JVM啟動後,在命令列中可以輸出所有XX引數和值:

-XX:+PrintFlagsFinal 以及 -XX:+PrintFlagsInitial

我的電腦上的Java版本是1.7.0_79,本文所講述的JVM引數全部都是這個版本有的(不同版本可能有所不同):

bogon:~ xujianxing$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
bogon:~ xujianxing$複製程式碼

讓我們現在就瞭解一下新引數的輸出。以 -client 作為引數的 -XX:+PrintFlagsFinal 的結果:

其輸出有可能是如下的情況:

$ java -client -XX:+PrintFlagsFinal 
[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複製程式碼

是一個按字母排序的669個參數列格。

而如果是按照-server的引數輸出,依然是669個引數。
client模式追求的是減小啟動速度和記憶體佔用,server模式追求最高的執行速度。

每一個引數各有五行,下面來每一行的引數有什麼意義:
表格的每一行包括五列,來表示一個XX引數。第一列表示引數的資料型別,第二列是名稱,第四列為值,第五列是引數的類別。第三列”=”表示第四列是引數的預設值,:=表示這個值被人為地修改過或者JVM通過人體工程學調優過。
uintX X位無符號整形,如uint32表示32位無符號整形 intX X位有符號整形,如int32表示32位有符號整形。第五個表示引數類別,product表示生產模式。diagnostic表示debug模式,可以用來除錯JVM。
manageable表示可以通過JMX設定的引數,具體情況可以看這裡:Developing Manageable Applications With JMX

pd表示平臺依賴(Platform Dependent),某些引數可能只有某個作業系統才有。

參考連結:

www.oracle.com/technetwork…
javadiscover.blogspot.hk/2013/10/hot…
pingtimeout.github.io/jvm-options…

相關文章