溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM參數(shù)表指的是什么

發(fā)布時間:2021-10-20 09:29:34 來源:億速云 閱讀:135 作者:柒染 欄目:大數(shù)據(jù)

JVM參數(shù)表指的是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Java HotSpot VM中-XX:的可配置參數(shù)列表進行描述;這些參數(shù)可以被松散的聚合成三類:


行為參數(shù)(Behavioral Options):用于改變jvm的一些基礎行為;
性能調(diào)優(yōu)(Performance Tuning):用于jvm的性能調(diào)優(yōu);
調(diào)試參數(shù)(Debugging Options):一般用于打開跟蹤、打印、輸出等jvm參數(shù),用于顯示jvm更加詳細的信息;

行為參數(shù):

參數(shù)及其默認值描述
-XX:-DisableExplicitGC禁止調(diào)用System.gc();但jvm的gc仍然有效
-XX:+MaxFDLimit最大化文件描述符的數(shù)量限制
-XX:+ScavengeBeforeFullGC新生代GC優(yōu)先于Full GC執(zhí)行
-XX:+UseGCOverheadLimit在拋出OOM之前限制jvm耗費在GC上的時間比例
-XX:-UseConcMarkSweepGC對老生代采用并發(fā)標記交換算法進行GC;指多個線程并發(fā)執(zhí)行GC,一般適用于多處理器系統(tǒng)中,可以提高GC的效率,但算法復雜,系統(tǒng)消耗較大; 
-XX:-UseParallelGC啟用并行GC;指GC運行時,對應用程序運行沒有影響,GC和app兩者的線程在并發(fā)執(zhí)行,這樣可以最大限度不影響app的運行; 
-XX:-UseParallelOldGC對Full GC啟用并行,當-XX:-UseParallelGC啟用時該項自動啟用
-XX:-UseSerialGC啟用串行GC;jvm的默認GC方式,一般適用于小型應用和單處理器,算法比較簡單,GC效率也較高,但可能會給應用帶來停頓;
-XX:+UseThreadPriorities啟用本地線程優(yōu)先級

性能調(diào)優(yōu)

參數(shù)及其默認值描述
-XX:LargePageSizeInBytes=4m設置用于Java堆的大頁面尺寸
-XX:MaxHeapFreeRatio=70GC后java堆中空閑量占的最大比例
-XX:MaxNewSize=size新生成對象能占用內(nèi)存的最大值
-XX:MaxPermSize=64m老生代對象能占用內(nèi)存的最大值
-XX:MinHeapFreeRatio=40GC后java堆中空閑量占的最小比例
-XX:NewRatio=2新生代內(nèi)存容量與老生代內(nèi)存容量的比例
-XX:NewSize=2.125m新生代對象生成時占用內(nèi)存的默認值
-XX:ReservedCodeCacheSize=32m保留代碼占用的內(nèi)存容量
-XX:ThreadStackSize=512設置線程棧大小,若為0則使用系統(tǒng)默認值
-XX:+UseLargePages使用大頁面內(nèi)存
-XX:PretenureSizeThreshold=10000大于指定大小的對象,直接進入老年代
-XX:MaxTenuringThreshold=15晉升老年代的年齡閥值
-XX:+HandlePromotionFailure=true關閉空間分配擔保
  
  

調(diào)試參數(shù)列表:

參數(shù)及其默認值描述
-XX:-CITime打印消耗在JIT編譯的時間
-XX:ErrorFile=./hs_err_pid<pid>.log保存錯誤日志或者數(shù)據(jù)到文件中
-XX:-ExtendedDTraceProbes開啟solaris特有的dtrace探針
-XX:HeapDumpPath=./java_pid<pid>.hprof指定導出堆信息時的路徑或文件名
-XX:-HeapDumpOnOutOfMemoryError當首次遭遇OOM時導出此時堆中相關信息
-XX:OnError="<cmd args>;<cmd args>"出現(xiàn)致命ERROR之后運行自定義命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"當首次遭遇OOM時執(zhí)行自定義命令
-XX:-PrintClassHistogram遇到Ctrl-Break后打印類實例的柱狀信息,與jmap -histo功能相同
-XX:-PrintConcurrentLocks遇到Ctrl-Break后打印并發(fā)鎖的相關信息,與jstack -l功能相同
-XX:-PrintCommandLineFlags打印在命令行中出現(xiàn)過的標記
-XX:-PrintCompilation當一個方法被編譯時打印相關信息
-XX:-PrintGC每次GC時打印相關信息
-XX:-PrintGC Details每次GC時打印詳細信息
-XX:-PrintGCTimeStamps打印每次GC的時間戳
-XX:-TraceClassLoading跟蹤類的加載信息
-XX:-TraceClassLoadingPreorder跟蹤被引用到的所有類的加載信息
-XX:-TraceClassResolution跟蹤常量池
-XX:-TraceClassUnloading跟蹤類的卸載信息
-XX:-TraceLoaderConstraints跟蹤類加載器約束的相關信息

當系統(tǒng)出現(xiàn)問題的時候,又不能使用外部跟蹤工具(比如JProfiler……)的情況下,以上的這些參數(shù)就會發(fā)揮重大作用了,比如dump堆信息、打印并發(fā)鎖......

G1

參數(shù)及其默認值描述
-XX: +UseG1GC啟用G1 GC。JDK7和JDK8要求必須顯示申請啟動G1 GC。JDK9已默認使用G1
-XX: G1NewSizePercent初始年輕代占整個Java Heap的大小,默認值為5%
- XX: G1MaxNewSizePercent最大年輕代占整個Java Heap的大小,默認值為60%
-XXG1HeapRegionSize設置每個Region的大小,單位MB,需要為1,2,4,8,16,32其一,默認是堆內(nèi)存的1/2000。
-XX:ConcGCThreads與Java應用一起執(zhí)行的GC線程數(shù)量。默認是Java線程的1/4。減少這個參數(shù)的數(shù)值可能會提升并行回收的效率,即提高系統(tǒng)內(nèi)部吞吐量(系統(tǒng)是一個整體,CPU資源大家都需要占用),不過如果這個數(shù)值過低,也會導致并行回收機制耗時加長
-XX:+InitiatingHeapOccupancyPercent(簡稱IHOP)G1內(nèi)部并行循環(huán)啟動的設置值,默認為Java Heap的45%。這個可以理解為老年代空間占用的空間,GC收集后需要低于45%的占用率。這個值主要是為了決定在什么時間啟動老年代的并行回收循環(huán),這個循環(huán)從初始化并行回收開始,可以避免Full GC的發(fā)生;
-XX:G1HeapWastePercentG1不會回收的內(nèi)存大小,默認是堆大小的5%。GC會收集所有的Region,如果值達到5%,就會停下來不再收集了
-XX:G1MixedGCCountTarget設置并行循環(huán)之后需要有多少個混合GC啟動,默認值是8個。老年代Regions的回收時間通常比年輕代的收集時間要長一些,所以如果混合收集器比較多,可以允許G1延長老年代的收集時間;
-XX:+G1PrintRegionLivenessInfo這個參數(shù)需要和-XX:+UnlockDiagnosticVMOptions配合啟動,這可以理解,它們本身就是屬于VM的調(diào)試信息。如果開啟了,VM會打印堆內(nèi)存里每個Region的存活對象信息。這個信息在標記循環(huán)結(jié)束后可以打印出來
-XX:G1ReservePercent這個值是為了保留一些空間用于年代之間的提升,默認值是堆空間的10%。注意這個空間保留后就不會用在年輕代了,大家可以看到GC日志里輸出顯示,我們大量執(zhí)行的是年輕代回收,所以如果你的應用里面有比較大的堆內(nèi)存空間、比較多的大對象存活,那還是減少一點保留空間吧,這樣會給年輕代更多的預留空間、GC之間更長的處理時間;
-XX:+G1SummarizeRSetStats這個也是一個VM的調(diào)試信息。如果啟用,會在VM推出的時候打印出RSets的詳細總結(jié)信息。如果啟用-XX:G1SummaryRSetStatsPeriod參數(shù),就會階段性地打印RSets信息;
-XX:+G1TraceConcRefinement這個也是一個VM的調(diào)試信息。如果啟用,并行回收階段的日志就會被詳細打印出來;
-XX:+GCTimeRatioGC的有些階段是需要Stop-the-World,即停止應用線程的,這個參數(shù)就是計算花在Java應用線程上和花在GC線程上的時間比率,默認是9。這個參數(shù)主要的目的是讓用戶可以控制花在應用上的時間,G1的計算公式是100/(1+GCTimeRatio),這樣如果采用9,則最多10%的時間會花在GC工作上面。Parallel GC的默認值是99,表示1%的時間被用在GC上面,這是因為Parallel GC貫穿整個GC,而G1則根據(jù)Region來進行劃分,不需要全局性掃描Java Heap;
-XX:+UseStringDeduplication手動開啟Java String對象的分割工作,這個是JDK8u20之后新增的參數(shù),主要用于相同String避免重復申請內(nèi)存,節(jié)約Region的使用;
-XX:MaxGCPauseMillsG1停止執(zhí)行的一個目標值,單位是毫秒,默認是200毫秒,這個值不一定真的會達到。這個參數(shù)會通過控制年輕代的大小來實現(xiàn)目標。
  
  
  
  

關于JVM參數(shù)表指的是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

jvm
AI