您好,登錄后才能下訂單哦!
JVM參數表指的是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Java HotSpot VM中-XX:的可配置參數列表進行描述;這些參數可以被松散的聚合成三類:
行為參數(Behavioral Options):用于改變jvm的一些基礎行為;
性能調優(Performance Tuning):用于jvm的性能調優;
調試參數(Debugging Options):一般用于打開跟蹤、打印、輸出等jvm參數,用于顯示jvm更加詳細的信息;
行為參數:
參數及其默認值 | 描述 |
-XX:-DisableExplicitGC | 禁止調用System.gc();但jvm的gc仍然有效 |
-XX:+MaxFDLimit | 最大化文件描述符的數量限制 |
-XX:+ScavengeBeforeFullGC | 新生代GC優先于Full GC執行 |
-XX:+UseGCOverheadLimit | 在拋出OOM之前限制jvm耗費在GC上的時間比例 |
-XX:-UseConcMarkSweepGC | 對老生代采用并發標記交換算法進行GC;指多個線程并發執行GC,一般適用于多處理器系統中,可以提高GC的效率,但算法復雜,系統消耗較大; |
-XX:-UseParallelGC | 啟用并行GC;指GC運行時,對應用程序運行沒有影響,GC和app兩者的線程在并發執行,這樣可以最大限度不影響app的運行; |
-XX:-UseParallelOldGC | 對Full GC啟用并行,當-XX:-UseParallelGC啟用時該項自動啟用 |
-XX:-UseSerialGC | 啟用串行GC;jvm的默認GC方式,一般適用于小型應用和單處理器,算法比較簡單,GC效率也較高,但可能會給應用帶來停頓; |
-XX:+UseThreadPriorities | 啟用本地線程優先級 |
性能調優:
參數及其默認值 | 描述 |
-XX:LargePageSizeInBytes=4m | 設置用于Java堆的大頁面尺寸 |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空閑量占的最大比例 |
-XX:MaxNewSize=size | 新生成對象能占用內存的最大值 |
-XX:MaxPermSize=64m | 老生代對象能占用內存的最大值 |
-XX:MinHeapFreeRatio=40 | GC后java堆中空閑量占的最小比例 |
-XX:NewRatio=2 | 新生代內存容量與老生代內存容量的比例 |
-XX:NewSize=2.125m | 新生代對象生成時占用內存的默認值 |
-XX:ReservedCodeCacheSize=32m | 保留代碼占用的內存容量 |
-XX:ThreadStackSize=512 | 設置線程棧大小,若為0則使用系統默認值 |
-XX:+UseLargePages | 使用大頁面內存 |
-XX:PretenureSizeThreshold=10000 | 大于指定大小的對象,直接進入老年代 |
-XX:MaxTenuringThreshold=15 | 晉升老年代的年齡閥值 |
-XX:+HandlePromotionFailure=true | 關閉空間分配擔保 |
調試參數列表:
參數及其默認值 | 描述 |
-XX:-CITime | 打印消耗在JIT編譯的時間 |
-XX:ErrorFile=./hs_err_pid<pid>.log | 保存錯誤日志或者數據到文件中 |
-XX:-ExtendedDTraceProbes | 開啟solaris特有的dtrace探針 |
-XX:HeapDumpPath=./java_pid<pid>.hprof | 指定導出堆信息時的路徑或文件名 |
-XX:-HeapDumpOnOutOfMemoryError | 當首次遭遇OOM時導出此時堆中相關信息 |
-XX:OnError="<cmd args>;<cmd args>" | 出現致命ERROR之后運行自定義命令 |
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" | 當首次遭遇OOM時執行自定義命令 |
-XX:-PrintClassHistogram | 遇到Ctrl-Break后打印類實例的柱狀信息,與jmap -histo功能相同 |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break后打印并發鎖的相關信息,與jstack -l功能相同 |
-XX:-PrintCommandLineFlags | 打印在命令行中出現過的標記 |
-XX:-PrintCompilation | 當一個方法被編譯時打印相關信息 |
-XX:-PrintGC | 每次GC時打印相關信息 |
-XX:-PrintGC Details | 每次GC時打印詳細信息 |
-XX:-PrintGCTimeStamps | 打印每次GC的時間戳 |
-XX:-TraceClassLoading | 跟蹤類的加載信息 |
-XX:-TraceClassLoadingPreorder | 跟蹤被引用到的所有類的加載信息 |
-XX:-TraceClassResolution | 跟蹤常量池 |
-XX:-TraceClassUnloading | 跟蹤類的卸載信息 |
-XX:-TraceLoaderConstraints | 跟蹤類加載器約束的相關信息 |
當系統出現問題的時候,又不能使用外部跟蹤工具(比如JProfiler……)的情況下,以上的這些參數就會發揮重大作用了,比如dump堆信息、打印并發鎖......
G1:
參數及其默認值 | 描述 |
-XX: +UseG1GC | 啟用G1 GC。JDK7和JDK8要求必須顯示申請啟動G1 GC。JDK9已默認使用G1 |
-XX: G1NewSizePercent | 初始年輕代占整個Java Heap的大小,默認值為5% |
- XX: G1MaxNewSizePercent | 最大年輕代占整個Java Heap的大小,默認值為60% |
-XX: G1HeapRegionSize | 設置每個Region的大小,單位MB,需要為1,2,4,8,16,32其一,默認是堆內存的1/2000。 |
-XX:ConcGCThreads | 與Java應用一起執行的GC線程數量。默認是Java線程的1/4。減少這個參數的數值可能會提升并行回收的效率,即提高系統內部吞吐量(系統是一個整體,CPU資源大家都需要占用),不過如果這個數值過低,也會導致并行回收機制耗時加長 |
-XX:+InitiatingHeapOccupancyPercent(簡稱IHOP) | G1內部并行循環啟動的設置值,默認為Java Heap的45%。這個可以理解為老年代空間占用的空間,GC收集后需要低于45%的占用率。這個值主要是為了決定在什么時間啟動老年代的并行回收循環,這個循環從初始化并行回收開始,可以避免Full GC的發生; |
-XX:G1HeapWastePercent | G1不會回收的內存大小,默認是堆大小的5%。GC會收集所有的Region,如果值達到5%,就會停下來不再收集了 |
-XX:G1MixedGCCountTarget | 設置并行循環之后需要有多少個混合GC啟動,默認值是8個。老年代Regions的回收時間通常比年輕代的收集時間要長一些,所以如果混合收集器比較多,可以允許G1延長老年代的收集時間; |
-XX:+G1PrintRegionLivenessInfo | 這個參數需要和-XX:+UnlockDiagnosticVMOptions配合啟動,這可以理解,它們本身就是屬于VM的調試信息。如果開啟了,VM會打印堆內存里每個Region的存活對象信息。這個信息在標記循環結束后可以打印出來 |
-XX:G1ReservePercent | 這個值是為了保留一些空間用于年代之間的提升,默認值是堆空間的10%。注意這個空間保留后就不會用在年輕代了,大家可以看到GC日志里輸出顯示,我們大量執行的是年輕代回收,所以如果你的應用里面有比較大的堆內存空間、比較多的大對象存活,那還是減少一點保留空間吧,這樣會給年輕代更多的預留空間、GC之間更長的處理時間; |
-XX:+G1SummarizeRSetStats | 這個也是一個VM的調試信息。如果啟用,會在VM推出的時候打印出RSets的詳細總結信息。如果啟用-XX:G1SummaryRSetStatsPeriod參數,就會階段性地打印RSets信息; |
-XX:+G1TraceConcRefinement | 這個也是一個VM的調試信息。如果啟用,并行回收階段的日志就會被詳細打印出來; |
-XX:+GCTimeRatio | GC的有些階段是需要Stop-the-World,即停止應用線程的,這個參數就是計算花在Java應用線程上和花在GC線程上的時間比率,默認是9。這個參數主要的目的是讓用戶可以控制花在應用上的時間,G1的計算公式是100/(1+GCTimeRatio),這樣如果采用9,則最多10%的時間會花在GC工作上面。Parallel GC的默認值是99,表示1%的時間被用在GC上面,這是因為Parallel GC貫穿整個GC,而G1則根據Region來進行劃分,不需要全局性掃描Java Heap; |
-XX:+UseStringDeduplication | 手動開啟Java String對象的分割工作,這個是JDK8u20之后新增的參數,主要用于相同String避免重復申請內存,節約Region的使用; |
-XX:MaxGCPauseMills | G1停止執行的一個目標值,單位是毫秒,默認是200毫秒,這個值不一定真的會達到。這個參數會通過控制年輕代的大小來實現目標。 |
關于JVM參數表指的是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。