文章出處
文章列表
功能開關:
參數 | 默認值或限制 | 說明 |
---|---|---|
參數 | 默認值 | 功能 |
-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<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 |
文章列表
全站熱搜