JVM -XX: 引數介紹
阿新 • • 發佈:2018-10-31
JVM -XX: 引數介紹
功能開關:
引數 | 預設值或限制 | 說明 |
---|---|---|
引數 | 預設值 | 功能 |
-XX:-AllowUserSignalHandlers | 限於Linux和Solaris,預設不啟用 | 允許為java程序安裝訊號處理器,訊號處理參見類:sun.misc.Signal, sun.misc.SignalHandler |
-XX:+DisableExplicitGC | 預設啟用 | 禁止在執行期顯式地呼叫System.gc() |
-XX:+FailOverToOldVerifier | Java6新引入選項,預設啟用 | 如果新的Class校驗器檢查失敗,則使用老的校驗器(失敗原因:因為JDK6最高向下相容到JDK1.2,而JDK1.2的class info 與JDK6的info存在較大的差異,所以新校驗器可能會出現校驗失敗的情況) |
-XX:+HandlePromotionFailure | java5以前是預設不啟用,java6預設啟用 | 關閉新生代收集擔保 |
-XX:+MaxFDLimit | 限於Solaris,預設啟用 | 設定java程序可用檔案描述符為作業系統允許的最大值。 |
-XX:PreBlockSpin=10 | -XX:+UseSpinning 必須先啟用,對於java6來說已經預設啟用了,這裡預設自旋10次 | 控制多執行緒自旋鎖優化的自旋次數 |
-XX:-RelaxAccessControlCheck | 預設不啟用 | 在Class校驗器中,放鬆對訪問控制的檢查,作用與reflection裡的setAccessible類似 |
-XX:+ScavengeBeforeFullGC | 預設啟用 | 在Full GC前觸發一次Minor GC |
-XX:+UseAltSigs | 限於Solaris,預設啟用 | 為了防止與其他傳送訊號的應用程式衝突,允許使用候補訊號替代 SIGUSR1和SIGUSR2 |
-XX:+UseBoundThreads | 限於Solaris, 預設啟用 | 繫結所有的使用者執行緒到核心執行緒, 減少執行緒進入飢餓狀態(得不到任何cpu time)的次數 |
-XX:-UseConcMarkSweepGC | 預設不啟用 | 啟用CMS低停頓垃圾收集器,減少FGC的暫停時間 |
-XX:+UseGCOverheadLimit | 預設啟用 | 限制GC的執行時間。如果GC耗時過長,就拋OOM |
-XX:+UseLWPSynchronization | 限於solaris,預設啟用 | 使用輕量級程序(核心執行緒)替換執行緒同步 |
-XX:-UseParallelGC | -server時啟用,其他情況下,預設不啟用 | 策略為新生代使用並行清除,年老代使用單執行緒Mark-Sweep-Compact的垃圾收集器 |
-XX:-UseParallelOldGC | 預設不啟用 | 策略為老年代和新生代都使用並行清除的垃圾收集器 |
-XX:-UseSerialGC | -client時啟用,其他情況下,預設不啟用 | 使用序列垃圾收集器 |
-XX:-UseSpinning | java1.4.2和1.5需要手動啟用, java6預設已啟用 | 啟用多執行緒自旋鎖優化 |
-XX:+UseTLAB | 1.4.2以前和使用-client選項時,預設不啟用,其餘版本預設啟用 | 啟用執行緒本地快取區 |
-XX:+UseSplitVerifier | java5預設不啟用, java6預設啟用 | 使用新的Class型別校驗器 |
-XX:+UseThreadPriorities | 預設啟用 | 使用本地執行緒的優先順序 |
-XX:+UseVMInterruptibleIO | 限於solaris,預設啟用 | 在solaris中,允許執行時中斷執行緒 |
效能引數:
引數 | 預設值或限制 | 說明 |
---|---|---|
-XX:+AggressiveOpts | JDK 5 update 6後引入,但需要手動啟用, JDK6預設啟用 | 啟用JVM開發團隊最新的調優成果。例如編譯優化,偏向鎖,並行年老代收集等 |
-XX:CompileThreshold=10000 | 1000 | 通過JIT編譯器,將方法編譯成機器碼的觸發閥值,可以理解為呼叫方法的次數,例如調1000次,將方法編譯為機器碼 |
-XX:LargePageSizeInBytes=4m | 預設4m, amd64位:2m | 設定堆記憶體的記憶體頁大小 |
-XX:MaxHeapFreeRatio=70 | 70 | GC後,如果發現空閒堆記憶體佔到整個預估上限值的70%,則收縮預估上限值 |
-XX:MaxNewSize=size | 1.3.1 Sparc: 32m, 1.3.1 x86: 2.5m | 新生代佔整個堆記憶體的最大值 |
-XX:MaxPermSize=64m | 5.0以後: 64 bit VMs會增大預設值的30%, 1.4 amd64: 96m, 1.3.1 -client: 32m, 其他預設 64m | Perm(俗稱方法區)佔整個堆記憶體的最大值 |
-XX:MinHeapFreeRatio=40 | 40 | GC後,如果發現空閒堆記憶體佔到整個預估上限值的40%,則增大上限值 |
-XX:NewRatio=2 | Sparc -client: 8, x86 -server: 8, x86 -client: 12, -client: 4 (1.3), 8 (1.3.1+), x86: 12, 其他預設 2 |
新生代和年老代的堆記憶體佔用比例, 例如2表示新生代佔年老代的1/2,佔整個堆記憶體的1/3 |
-XX:NewSize=2.125m | 5.0以後: 64 bit Vms 會增大預設值的30%, x86: 1m, x86, 5.0以後: 640k, 其他預設 2.125m | 新生代預估上限的預設值 |
-XX:ReservedCodeCacheSize=32m | Solaris 64-bit, amd64, -server x86: 48m, 1.5.0_06之前, Solaris 64-bit amd64: 1024m, 其他預設 32m | 設定程式碼快取的最大值,編譯時用 |
-XX:SurvivorRatio=8 | Solaris amd64: 6, Sparc in 1.3.1: 25, Solaris platforms 5.0以前: 32, 其他預設 8 | Eden與Survivor的佔用比例。例如8表示,一個survivor區佔用 1/8 的Eden記憶體,即1/10的新生代記憶體,為什麼不是1/9? 因為我們的新生代有2個survivor,即S0和S1。所以survivor總共是佔用新生代記憶體的 2/10,Eden與新生代的佔比則為 8/10 |
-XX:TargetSurvivorRatio=50 | 50 | 實際使用的survivor空間大小佔比。預設是50%,最高90% |
-XX:ThreadStackSize=512 | Sparc: 512, Solaris x86: 320 (5.0以前 256), Sparc 64 bit: 1024, Linux amd64: 1024 (5.0 以前 0), 其他預設 512. | 執行緒堆疊大小 |
-XX:+UseBiasedLocking | JDK 5 update 6後引入,但需要手動啟用, JDK6預設啟用 | 啟用偏向鎖 |
-XX:+UseFastAccessorMethods | 預設啟用 | 優化原始型別的getter方法效能(get/set:Primitive Type) |
-XX:-UseISM | 預設啟用 | 啟用solaris的ISM |
-XX:+UseLargePages | JDK 5 update 5後引入,但需要手動啟用, JDK6預設啟用 | 啟用大記憶體分頁 |
-XX:+UseMPSS | 1.4.1 之前: 不啟用, 其餘版本預設啟用 | 啟用solaris的MPSS,不能與ISM同時使用 |
-XX:+UseStringCache | 預設開啟 | 啟用快取常用的字串。 |
-XX:AllocatePrefetchLines=1 | 1 | Number of cache lines to load after the last object allocation using prefetch instructions generated in JIT compiled code. Default values are 1 if the last allocated object was an instance and 3 if it was an array. |
-XX:AllocatePrefetchStyle=1 | 1 | Generated code style for prefetch instructions. 0 – no prefetch instructions are generate*d*, 1 – execute prefetch instructions after each allocation, 2 – use TLAB allocation watermark pointer to gate when prefetch instructions are executed. |
-XX:+UseCompressedStrings | Java 6 update 21有一選項 | 其中,對於不需要16位字元的字串,可以使用byte[] 而非char[]。對於許多應用,這可以節省記憶體,但速度較慢(5%-10%) |
-XX:+OptimizeStringConcat | 在Java 6更新20中引入 | 優化字串連線操作在可能的情況下 |
除錯引數:
引數 | 預設值或限制 | 說明 |
---|---|---|
-XX:-CITime | 打印發費在JIT編譯上的時間 | |
-XX:ErrorFile=./hs_err_pid.log | JDK6中引入 | 錯誤檔案 |
-XX:-ExtendedDTraceProbes | JDK6中引入僅在Solaris | 啟用效能的影響DTrace探測器 |
-XX:HeapDumpPath=./java_pid.hprof | 1.4.2 update 12, 5.0 update 7 | 指定HeapDump的檔案路徑或目錄 |
-XX:-HeapDumpOnOutOfMemoryError | 1.4.2 update 12, 5.0 update 7 | 當丟擲OOM時進行HeapDump |
-XX:OnError=”;” | 1.4.2 update 9 | 當發生錯誤時執行使用者指定的命令 |
-XX:OnOutOfMemoryError=”; ” |
1.4.2 update 12, 6 | 當發生OOM時執行使用者指定的命令 |
-XX:-PrintClassHistogram | 1.4.2 | 當Ctrl+Break發生時列印Class例項資訊,與jmap -histo相同 |
-XX:-PrintConcurrentLocks | 6 | 當Ctrl+Break發生時列印java.util.concurrent的鎖資訊, 與jstack -l相同 |
-XX:-PrintCommandLineFlags | 5 | 列印命令列上的標記 |
-XX:-PrintCompilation | 當方法被編譯時列印資訊 | |
-XX:-PrintGC | 當GC發生時列印資訊 | |
-XX:-PrintGCDetails | 1.4.0 | 列印GC詳細資訊 |
-XX:-PrintGCTimeStamps | 1.4.0 | 列印GC用時 |
-XX:-PrintTenuringDistribution | 列印Tenuring年齡資訊 | |
-XX:-TraceClassLoading | 跟蹤類載入 | |
-XX:-TraceClassLoadingPreorder | 1.4.2 | 跟蹤所有載入的引用類 |
-XX:-TraceClassResolution | 1.4.2 | 跟蹤常量池的變化 |
-XX:-TraceClassUnloading | 跟蹤類的解除安裝 | |
-XX:-TraceLoaderConstraints | 6 | Trace recording of loader constraints |
-XX:+PerfSaveDataToFile | 退出時儲存jvmstat二進位制檔案 | |
-XX:ParallelGCThreads= | 設定新生代與老年代並行垃圾回收器的執行緒數 | |
-XX:+UseCompressedOops | Enables the use of compressed pointers (object references represented as 32 bit offsets instead of 64-bit pointers) for optimized 64-bit performance with Java heap sizes less than 32gb. | |
-XX:+AlwaysPreTouch | Pre-touch the Java heap during JVM initialization. Every page of the heap is thus demand-zeroed during initialization rather than incrementally during application execution. | |
-XX:AllocatePrefetchDistance= | Sets the prefetch distance for object allocation. Memory about to be written with the value of new objects is prefetched into cache at this distance (in bytes) beyond the address of the last allocated object. Each Java thread has its own allocation point. The default value varies with the platform on which the JVM is running. | |
-XX:InlineSmallCode= | 當編譯的程式碼小於指定的值時,內聯編譯的程式碼 | |
-XX:MaxInlineSize=35 | 內聯方法的最大位元組數 | |
-XX:FreqInlineSize= | 內聯頻繁執行的方法的最大位元組碼大小 | |
-XX:LoopUnrollLimit= | Unroll loop bodies with server compiler intermediate representation node count less than this value. The limit used by the server compiler is a function of this value, not the actual value. The default value varies with the platform on which the JVM is running. | |
-XX:InitialTenuringThreshold=7 | 設定初始的物件在新生代中最大存活次數 | |
-XX:MaxTenuringThreshold= | 設定物件在新生代中最大的存活次數,最大值15,並行回收機制預設為15,CMS預設為4 |