注:Remembered Sets(RSets)是每個region裏面幫助G1 GC追蹤外部指向這個region的引用。所以如今,取代由於引用指向這個region掃描整個heap區,G1只須要掃描RSets。html
HopSpot 提供的幾種運行模式:算法
模式 | 選項指定 | 描述說明 | 備註 |
---|---|---|---|
解釋模式 | -Xint | 讓JVM以解釋模式運行Java程序 | 無 |
編譯模式 | -Xcomp | 讓JVM以編譯模式運行Java程序 | 無 |
混合模式 | -Xmixed | 讓JVM以解釋+編譯模式運行Java程序。默認方式 | 無 |
================ Java8 JVM 可選項================緩存
可選項 | 默認值 | 解釋說明 | 備註 |
---|---|---|---|
-XX:MetaspaceSize | metaspace 初始容量.Metaspace 區域爲 Java 1.8 新增,去 1.7 永久代的替代參數。並非全部的永久代數據都放置在metaspace 區域,只有類消息是放置在metaspace, 其餘信息都在堆上 | ||
-XX:MaxMetaspaceSize |
metaspace 區的最大容量安全 |
||
-XX:G1NewSizePercent | 8 | G1 的Young 區是經過算法自動適應肯定的。Young區GC的耗時來肯定以後的Young大小,若是耗時過長,則調小Young區,耗時太短,則調大Young區. | |
-XX:G1RSetUpdatingPauseTimePercent | G1 收集器進行GC的時候,更新 RSet 的目標時間值;注:爲了讓評估暫停階段把大量的時間花費在拷貝存活對象上。若是改變了花費在更新RSet上的時間,那就必須有肯定工做線程能夠在回收暫停階段完成它們的工做;若是不能,那這部分工做就會被放到 Refinement 線程裏面去執行,致使並行工做量增長,並行回收次數增多。 | ||
-XX:G1MixedGCCountTarget | 當佔用內存超過InitiatingHeapOccupancyPercent閥值時, 最多經過多少次Mixed GC來將內存控制在閥值之下. | ||
-XX:G1HeapRegionSize | 表示G1 垃圾收集器將每一個Region切分紅多大;每一個 Region最大不超過 32M(2 的指數), | ||
-XX:+G1SummarizeRSetStats | 統計RSet 的密度數量(細粒度或者粗粒度),這個密度幫助決定是否並行 Refinement線程有能力去應對更新緩存的工做,而且手機更多關於 Nmethods的信息。這個選項每隔 n 次 GC 暫停收集一次 RSet 的統計信息, 這個 N 次 由選項 -XX:G1SummarizeRSetStatsPeriod=n 決定,也是須要經過選項進行設置的。 | ||
-XX:G1SummarizeRSetStatsPeriod=n | n | ||
-XX:G1NewSizePercent | 5% | 初始化年輕代佔用整個堆內存的百分比 | |
-XX:G1MaxNewSizePercent | 60% | 年輕代的上升空間,即最大能夠佔用堆內存的百分比。 | |
-XX:StringTableSize | |||
-XX:+PrintStringTableStatistics | 打印 StringTable 的統計信息 | ||
-XX:+NoOmitFramePointer | |||
-XX:+PreserveFramePointer | |||
-XX:+PrintStringTableStatistics併發
在JVM進程退出時,打印出StringTable的統計信息到標準日誌輸出目錄中。oracle
-XX:+UseCMSCompactAtFullCollection函數
默認是開啓的;開啓內存碎片的合併整理過程spa
-XX:CMSFullGCsBeforeCompaction線程
設置執行多少次不壓縮的FULL GC後,緊接着執行一次碎片整理指針
-XX:+CMSParallelRemarkEnabled
啓用併發標記
-XX:+CMSScavengeBeforeRemark
若是 remark 時間過長,開啓該選項能夠強制 remark 以前開啓一次 minor gc , 以減小 remark 暫停時間。可是在 remark 以後當即開始一次 minor gc.
-XX:MaxGCPauseMills
設置垃圾收集器,最大停頓時間
-XX:GCTimeRatio
設置吞吐量的大小。可選值爲 1 -- 100 之間,假設 GCTimeRatio 的值爲 n,那麼系統將花費不超過 1/(1+n) 的時間用於垃圾收集。
-XX:InitiatingHeapOccupancyPercent
當佔用內存超過這個百分比的時候, G1 垃圾收集器開始執行屢次Mixed GC來整理老年代內存碎片.
-XX:PrintFlagsWithComments
-XX:PrintVMOptions
-XX:PrintFlagsInitial
-XX:ManagementServer
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:+ExplicitGCInvokesConcurrent | None | 指定System.gc()採用 CMS 算法,FGC時停機時間會變短,可是CMS GC次數不會變。 |
-XX:-UseBiasedLocking | 啓用 | 關閉偏向鎖 |
-XX:+PerfDisableSharedMem | 啓用 | 是否容許寫統計文件。因爲參數裏面帶有 Disable,關閉的意思就是容許寫統計文件,啓用的意思就是禁止寫統計文件,注意不要把它理解反了; |
-Dsun.rmi.dgc.client.gcInterval=36000000 -Dsun.rmi.dgc.server.gcInterval=36000000
rmi默認一小時主動觸發一次,這裏能夠將配置爲10小時;
注意:CMS initial-mark 和 CMS remark 都會致使 stop-the-world。 故在 jstat 查看 FGC 參數值時,會出現 +2 的狀況。
================OS模塊初始化相關的VM配置、調試選項================
可選項 | 默認值 | 解釋說明 |
-XX:+UseNUMA | false | 使用 NUMA |
-XX:+UseLargePages | true | 使用大頁內存 |
-XX:+UseSHM | false | 使用 SYSV 共享內存 |
-XX:+MaxFDLimit | true | 最大文件描述數量 |
-XX:+PerfAllowAtExitRegistration | false | 容許向系統註冊 atexit 函數 |
-XX:+PrintMicellaneous | false | 輸出未分類的調試信息(須要開啓Verbose) |
================ OOP 相關 VM 選項 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:UseCompressedOops | false | 在64位 VM 中使用開啓壓縮OOPS,用32位指針指向類元數據(僅限64位VM) |
-XX:CheckCompressedOops | true | 對壓縮OOPS開啓校驗 |
-XX:CompactFields | true | 字段壓實 |
-XX:PrintCompactFieldsSavings | false | 輸出開啓CompactFields後,節省了多少字節空間 |
-XX:FieldsAllocationStyle | 1 | 域分配策略 |
================ VM 選項:類加載相關 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:TraceClassLoading | false | 跟蹤全部類加載過程 |
-XX:TraceClassLoadingPreorder | false | 跟蹤全部類在載入前的過程 |
-XX:TraceClassInitialization | false | 跟蹤類初始化過程 |
-XX:TraceClassResolution | false | 跟着常量池解析過程 |
-XX:TraceClassUnloading | false | 跟蹤類卸載過程 |
-XX:TraceLoaderConstraints | false | 跟着加載器約束 |
-XX:PrintSystemDictionaryAtExit | false | 輸出系統字典信息 |
-XX:PrintClassStatistics | false | 輸出類統計信息 |
-XX:MustCallLoadClassInternal | false | loadClassInternal() 替代 loadClass() |
-XX:LoadLineNumberTables | true | 類文件解析器是否加載代碼行號表 |
-XX: LoadLocalVariableTables | true | 類文件解析器是否加載局部變量表 |
-XX:LoadLocalVariableTypeTables | true | 類文件解析器是否加載局部變量類型表 |
-XX:LinkWellKnownClasses | false | 解析熟知類 |
-XX:LazyBootClassLoader | true | 是否延遲打開啓動類路徑 |
-XX:CompileTheWorldPreloadClasses | true | 加載一個類時,是否預加載其用到的全部類 |
-XX:ClassUnloading | true | 類卸載 |
-XX:AlwaysLockClassLoader | false | 要求VM在調用 loadClass()前先得到類加載器鎖 |
-XX:UnsyncloadClass | false | 非同步方式調用 loadClass() |
================ VM 選項:類驗證相關 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:BytecodeVerificationLocal | false | 開啓對本地類的字節碼驗證 |
-XX:BytecodeVerificationRemote | true | 開啓對遠程類的字節碼驗證 |
-XX:UseSplitVerifier | true | 對 StackMap Table 屬性應用 split verifier |
-XX:FailOverToDidVerfier | true | 當對 StackMapTable屬性應用 split verifier 校驗失敗時,回到舊的 verifier。 |
================ VM 選項:GC 日誌相關 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:PrintGC | false | 等同於 "-verbose:gc" |
-XX:PrintGCDetail | GC 時輸出更多細節信息 | |
-XXPrintGCDateStamps | false | GC操做的日期信息,相對於時間戳,這個是 GST 時間 |
-XXPrintGCTimeStamps | false | GC 時的時間戳信息 |
-XX:PrintGCTaskTimeStamps | false | 輸出每一個 GC 工做線程的時間戳信息 |
-Xloggc:<filename> | 輸出GC 日誌至文件 | |
-XX:+UseGCLogFileRotation | 啓用GC日誌文件的自動轉儲 | |
-XX:+PrintTenuringDistribution | ||
-XX:+PrintGCApplicationStoppedTime | ||
-XX:CMSWaitDuration | 2s | 掃描Old區時間間隔 |
-XX:CMSInitiatingOccupancyFraction | 65 | Old區佔比超過參數執行 GC 操做 |
-XX:+UseCMSInitiatingOccupancyOnly | 配合上面參數使用,只有 old 區,佔比條件知足狀況下,才觸發CMS GC | |
-XX:PrintFLSStatistics | 打印每次gc先後的Heap餘量。較大的餘量,能夠懷疑Heap中存在內存碎片過多 | |
-XX:+ExplicitGCInvokesConcurrent | 將System.gc轉爲background式的回收 |
================ VM 選項:GC 安全點相關 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:PrintGCApplicationConcurrentTime | false | 默認值false, 應用程序運行時間 |
-XX:PrintGCApplicationStoppedTime | false | 應用程序暫停時間,在以安全點開始的操做中,線程停頓時間 |
-XX:ShowSafepointMsgs | false | 顯示關於 安全點的信息 |
-XX:PrintSafepointStatisticsCount | 300 | |
-XX:PrintSafepointStatisticsTimeout | -1 | 輸出關於安全點的統計信息 |
-XX:+PrintSafepointStatistics | 300 | 應用程序暫停緣由 |
================ VM 選項:CMS 配置選項 ================
可選項 | 默認值 | 解釋說明 |
---|---|---|
-XX:UseConcMarkSweepGC | false | 對老年代使用併發標記-清除(CMS)回收 |
-XX:CMSIncrementalMode | false | 增量模式 |
-XX:CMSIncrementalPacing | true | 增量模式自動調整 |
-XX:ParallelGCThreads | 0 | 並行執行的GC線程數量 |
-XX:UseParNewGC | false | 對新生代使用並行線程手機,以配合CMS老年代手機。即便不開啓該選項,當選擇CMS後,新生代默認也會使用ParNew。 |
【參考資料】
1.[Oracle 官網文檔]. http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html