G1 Garbage Collector 及JVM 參數說明(持續更新)

 

    注: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

相關文章
相關標籤/搜索