功能開關:java
參數 | 默認值或限制 | 說明 |
---|---|---|
參數 | 默認值 | 功能 |
-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中,容許運行時中斷線程 |
性能參數:node
參數 | 默認值或限制 | 說明 |
---|---|---|
-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<pid>.log | JDK6中引入 | 錯誤文件 |
-XX:-ExtendedDTraceProbes | JDK6中引入僅在Solaris | 啓用性能的影響DTrace探測器 |
-XX:HeapDumpPath=./java_pid<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=」<cmd args>;<cmd args>」 | 1.4.2 update 9 | 當發生錯誤時執行用戶指定的命令 |
-XX:OnOutOfMemoryError=」<cmd args>; <cmd args>」 |
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 |