Java HotSpot VM命名參數選項詳解

jopen 10年前發布 | 21K 次閱讀 Java Java開發

Java Hotspot VM 可選參數選項可以劃分為四類:

?  行為選項改變了基本VM的行為。

?  G1垃圾收集器選項(GarbageFirst (G1) Garbage Collection Options

?  性能調優選項就一個個能夠用來調節VM性能的旋鈕

?  調試選項一般跟蹤、打印或是輸出VM信息。在跟蹤程序的處理流程非常有用,尤其對于不知道程序有問題而不知道問題到底處在哪里時就特別有用。

行為選項

Option and Default Value

</td>

Description

</td> </tr>

-XX:-AllowUserSignalHandlers

</td>

如果應用程序安裝了信號處理器,就不會申訴(僅與Solaris和Linux系統有關)。

</td> </tr>

-XX:AltStackSize=16384

</td>

交替的信號棧大小(k 字節). (僅與Solaris 有關, 在5.0版本已經移除.)

</td> </tr>

-XX:-DisableExplicitGC

</td>

使方法System.gc()調用失效,當需要時 JVM 仍然執行垃圾回收。

</td> </tr>

-XX:+FailOverToOldVerifier

</td>

當新的類型檢測器失敗時切換到舊的認證器(jdk6引入此項)。

</td> </tr>

-XX:+HandlePromotionFailure

</td>

最年輕代集合不需要一個對所有存在對完全提升的保證。 (在1.4.2 升級到11引進) [5.0 和早期的版本為false]

</td> </tr>

-XX:+MaxFDLimit

</td>

猛烈將文件描寫的數量增加到最大。 (僅與Solaris系統有關.)

</td> </tr>

-XX:PreBlockSpin=10

</td>

快速的旋運動變量數設定-XX:+UseSpinning.在進入操作系統線程同步代碼前,控制最大旋轉允許的跌代數。 (在1.4.2.引入)

</td> </tr>

-XX:-RelaxAccessControlCheck

</td>

放松訪問控制檢查驗證 (在jdk6引入)

</td> </tr>

-XX:+ScavengeBeforeFullGC

</td>

年輕代GC優先于一個完全GC。 (在jdk1.4.1.引入)

</td> </tr>

-XX:+UseAltSigs

</td>

對于VM內部信號,應用輪換信號代替SIGUSR1 和SIGUSR2 . (僅與Solaris有關.)

</td> </tr>

-XX:+UseBoundThreads

</td>

綁定用戶級別線程到kernel 線程. (僅與Solaris有關.)

</td> </tr>

-XX:-UseConcMarkSweepGC

</td>

為舊代(old generation)使用并發標記的搜索集合. (在1.4.1引入)

</td> </tr>

-XX:+UseGCOverheadLimit

</td>

使用一種策略,這種策略能夠限制VM在內存溢出前花費在GC上的時間比例。 (在jdk 6進入.)

</td> </tr>

-XX:+UseLWPSynchronization

</td>

使用基于LWP-代替基于線程同步。(在jdk1.4.0. 僅針對Solaris)

</td> </tr>

-XX:-UseParallelGC

</td>

使用并行垃圾收集器對垃圾進行回收。 (在jdk 1.4.1引入)

</td> </tr>

-XX:-UseParallelOldGC

</td>

所有的集合使用并行垃圾收集器。能夠自動化地設置這個選項 -XX:+UseParallelGC. (在jdk 5.0 升級到 6時引入.)

</td> </tr>

-XX:-UseSerialGC

</td>

使用序列的垃圾收集器. (在jdk 5引入.)

</td> </tr>

-XX:-UseSpinning

</td>

在同步進入到操作系統線程同步代碼前,能夠在Java監視器中單純的旋轉。 (僅與jdk1.4.2 到 5.0 有關.)

</td> </tr>

-XX:+UseTLAB

</td>

使用本地線程對象分配 (在jdk 1.4.0引入,眾所周知的, UseTLE優先于那種.)

</td> </tr>

-XX:+UseSplitVerifier

</td>

使用StackMapTable 屬性來作為新類型檢測器。(在jdk 5.0引入.)[5.0: false]

</td> </tr>

-XX:+UseThreadPriorities

</td>

使用本地線程優先級。

</td> </tr>

-XX:+UseVMInterruptibleIO

</td>

線程中斷前或是EINTR 在OS_INTRPT中對于I/O操作的結果 (在jdk 6 引入,僅與Solaris 有關)

</td> </tr> </tbody> </table>

G1(Garbage First)垃圾收集選項

  • Option and Default Value

    </td>

    Description

    </td> </tr>

    -XX:+UseG1GC

    </td>

    使用G1 (Garbage First) 收集器

    </td> </tr>

    -XX:MaxGCPauseMillis=n

    </td>

    對于最大GC停頓時間,設置一個目標。 這是一個軟目標,于此同時JVM將會做最大努力去完成它。

    </td> </tr>

    -XX:InitiatingHeapOccupancyPercent=n

    </td>

    整個堆占據的百分比去開始一個并發GC循環。他被GC使用來觸發一個基于整個堆占據的并發GC循環, 不僅僅只有一個地代(G1). 0值說明是“做實時GC循環”。默認值是45 。

    </td> </tr>

    -XX:NewRatio=n

    </td>

    舊/新代大小比例。默認是2.

    </td> </tr>

    -XX:SurvivorRatio=n

    </td>

    eden/survivor 空間大小比例。默認值是8

    </td> </tr>

    -XX:MaxTenuringThreshold=n

    </td>

    永久占用臨界最大值。默認值是15.

    </td> </tr>

    -XX:ParallelGCThreads=n

    </td>

    在并行的垃圾收集階段設置使用的線程數。默認值因JVM運行的平臺的不同而不同。

    </td> </tr>

    -XX:ConcGCThreads=n

    </td>

    并發垃圾收集線程 將會使用默認值因JVM運行的平臺的不同而不同.

    </td> </tr>

    -XX:G1ReservePercent=n

    </td>

    設置被保留作為吊頂的堆量,以減少可能的增量失敗. 默認值是10.

    </td> </tr>

    -XX:G1HeapRegionSize=n

    </td>

    伴隨G1 Java堆被子劃分為統一的大小區域。這個參數的默認值取決于根據環境改造地基準堆得大小。最小是1M幣,最大是32Mb。

    </td> </tr> </tbody> </table>

    性能優化選項

    Option and Default Value

    </td>

    Description

    </td> </tr>

    -XX:+AggressiveOpts

    </td>

    打開點性能的編譯器優化,它預計將在即將發布為默認. (在jdk 5 升級到6引入.)

    </td> </tr>

    -XX:CompileThreshold=10000

    </td>

    在編譯之前,方法數量調用/分支[-client: 1,500]

    </td> </tr>

    -XX:LargePageSizeInBytes=4m

    </td>

    設置大頁面使用Java堆的大小 (在1.4.0 更新中引入) [amd64: 2m.]

    </td> </tr>

    -XX:MaxHeapFreeRatio=70

    </td>

    在GC之后最大堆釋放的百分比,這樣來避免萎縮。

    </td> </tr>

    -XX:MaxNewSize=size

    </td>

    新代(字節)最大值自從1.4, MaxNewSize is 計算作為NewRatio一個方法. [1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m.]

    </td> </tr>

    -XX:MaxPermSize=64m

    </td>

    永久代的大小[5.0 和 新的64 bit VMs 擴展了30%的大小; 1.4 amd64: 96m; 1.3.1 -client: 32m.]

    </td> </tr>

    -XX:MinHeapFreeRatio=40

    </td>

    GC之后,自由的堆得最小百分來避免擴展。

    </td> </tr>

    -XX:NewRatio=2

    </td>

    新/老代的比例[Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12]

    </td> </tr>

    -XX:NewSize=2m

    </td>

    新代的默認大小 (字節) [5.0 和新的64 bit VMs 擴展了30% larger; x86: 1m; x86, 5.0 and older: 640k]

    </td> </tr>

    -XX:ReservedCodeCacheSize=32m

    </td>

    預留的緩存代碼大小 (字節) – 最大代碼緩沖大小. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and amd64: 1024m.]

    </td> </tr>

    -XX:SurvivorRatio=8

    </td>

    活躍區/幸免區(eden/survivor)的空間大小比例[Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]

    </td> </tr>

    -XX:TargetSurvivorRatio=50

    </td>

    在清理完后幸存空間的百分率。.

    </td> </tr>

    -XX:ThreadStackSize=512

    </td>

    線程棧的大小(字節). (0 意味著使用默認的棧大小[Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]

    </td> </tr>

    -XX:+UseBiasedLocking

    </td>

    能使用帶有偏見的鎖,更多的細節,查看優化例子 ( 5.0 更新到 6引入.) [5.0: false]

    </td> </tr>

    -XX:+UseFastAccessorMethods

    </td>

    使用優化了Get GetField版本.

    </td> </tr>

    -XX:-UseISM

    </td>

    使用內部的共享內存. [僅對Solaris 平臺] 更多的細節,查閱內部的共享內存 .

    </td> </tr>

    -XX:+UseLargePages

    </td>

    使用大的內存頁 (5.0 更行引入.),更多的細節,請查閱Java對大內存頁 支持

    </td> </tr>

    -XX:+UseMPSS

    </td>

    使用多個頁大小來支持對于棧w/4mb頁.  不用伴隨使用ISM,由于這取代了對于ISM的需要。 (1.4.0 更新引進,進對Solaris 9+支持.) [1.4.1 and earlier: false]

    </td> </tr>

    -XX:+UseStringCache

    </td>

    能夠緩存一般分配的字符串。
     

    </td> </tr>

    -XX:AllocatePrefetchLines=1

    </td>

    最后一個對象分配使用在JIT編譯代碼產生的預取指令后,加載緩存線數默認的值是1. 最后分配的對象是一個實例以及如果它是一個數組便是值3. 
     

    </td> </tr>

    -XX:AllocatePrefetchStyle=1

    </td>

    產生預取指令的代碼樣式.
    0 – 沒有預取指令產生,
    1 – 在每個分配后,執行預取指令,
    2 – 當預取指令執行了,使用TLAB 分配水印指針到閘門。
     

    </td> </tr>

    -XX:+UseCompressedStrings

    </td>

    使用字節數組能夠以純ASCII碼來描述字符串。(JDK 6 更新版本21 性能發布時引入) 
     

    </td> </tr>

    -XX:+OptimizeStringConcat

    </td>

    那兒有可能實現優化了字符串的拼接操作。(JDK 6升級到20時引入) 
     

    </td> </tr> </tbody> </table>

    調試選項

       略...


     JVM 工作流概述圖

    Java HotSpot VM命名參數選項詳解


    Java HotSpot VM命名參數選項詳解

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色