這篇文章主要為大家展示了“Java虛擬機中常用vm參數(shù)的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Java虛擬機中常用vm參數(shù)的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過10年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行成都做網(wǎng)站、網(wǎng)站設(shè)計、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
首先想說的是其實這些參數(shù)我們并不是陌生的,在平時的開發(fā)和使用中經(jīng)常都會遇到,只是在平時缺少一個比較系統(tǒng)的總結(jié),所以,對這些參數(shù)感覺是很陌生的,所以,通過這篇文章的總結(jié),我相信你一定都會對這些參數(shù)熟稔于心,做做心中有數(shù)。
在Java虛擬機的參數(shù)中,其實可以把這些參數(shù)分為三類,當然,這是針對JDK1.6來說的,如果對于JDK1.8,那么就不是這么分類的了,但是,由于這兩個版本很多常用的參數(shù)的差別是不大的,所以這篇文章就先介紹JDK1.6的VM參數(shù)。
主要可以分為以下三類:
標準參數(shù)(-)
,所有的JVM實現(xiàn)都必須實現(xiàn)這些參數(shù)的功能,而且向后兼容。
非標準參數(shù)(-X)
,默認JVM實現(xiàn)這些參數(shù)的功能,但是并不保證所有JVM實現(xiàn)都滿足,且不保證向后兼容。
非Stable參數(shù)(-XX)
,此類參數(shù)各個JVM實現(xiàn)會有所不同,將來可能會隨時取消,需要慎重使用。
雖然是這么分類的,實際上呢,非標準參數(shù)和非穩(wěn)定的參數(shù)實際的使用中還是用的非常的多的,在后面的文章的介紹中你就會發(fā)現(xiàn)。
這一類參數(shù)可以說是我們剛剛開始Java是就用的非常多的參數(shù)了,比如java -version
、java -jar
等等,我們在CMD中輸入java -help
就可以獲得Java當前版本的所有標準參數(shù)了。
如上圖就是JDK1.8的所有標準參數(shù)了,下面我們將介紹一些我們會用的比較多的參數(shù)。
-client
以client模式啟動JVM,這種方式啟動速度快,但運行時性能和內(nèi)存管理效率不高,適合客戶端程序或者開發(fā)調(diào)試。
-server
參數(shù)及其默認值 | 描述 |
---|---|
-XX:LargePageSizeInBytes=4m | 設(shè)置用于Java堆的大頁面尺寸 |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空閑量占的最大比例 |
-XX:MinHeapFreeRatio=40 | GC后java堆中空閑量占的最小比例 |
-XX:MaxNewSize=size | 新生成對象能占用內(nèi)存的最大值 |
-XX:MaxPermSize=64m | 老生代對象能占用內(nèi)存的最大值 |
-XX:NewRatio=2 | 新生代內(nèi)存容量與老生代內(nèi)存容量的比例 |
-XX:NewSize=2.125m | 新生代對象生成時占用內(nèi)存的默認值 |
-XX:ReservedCodeCacheSize=32m | 保留代碼占用的內(nèi)存容量 |
-XX:ThreadStackSize=512 | 設(shè)置線程棧大小,若為0則使用系統(tǒng)默認值 |
-XX:+UseLargePages | 使用大頁面內(nèi)存 |
行為參數(shù)
參數(shù)及其默認值 | 描述 |
---|---|
-XX:+ScavengeBeforeFullGC | 新生代GC優(yōu)先于Full GC執(zhí)行 |
-XX:+UseGCOverheadLimit | 在拋出OOM之前限制jvm耗費在GC上的時間比例 |
-XX:-UseParNewGC | 打開此開關(guān),使用ParNew+Serial Old 收集器 |
-XX:-UseConcMarkSweepGC | 使用ParNew+CMS+Serial Old 收集器對老生代采用并發(fā)標記交換算法進行GC |
-XX:-UseParallelGC | 啟用并行GC,使用ParallelScavenge+Serial Old 收集器 |
-XX:-UseParallelOldGC | 對Full GC啟用并行,當-XX:-UseParallelGC 啟用時該項自動啟用,ParallelScavenge+Parallel Old 收集器 |
-XX:-UseSerialGC | 啟用串行GC |
-XX:+UseG1GC | 使用垃圾優(yōu)先(G1)收集器 |
-XX:SurvivorRatio=n | Eden區(qū)域與Survivor區(qū)域大小之比。預設(shè)值為8 |
-XX:PretenureSizeThreshold=n | 直接晉升到老年代的對象大小,設(shè)置這個參數(shù)之后,大于這個參數(shù)的對象直接進入到老年代分配 |
-XX:MaxTenuringThreshold=n | 晉升到老年代的對象年齡,每個對象在堅持過一次Minor GC之后,年齡加1,當超過這個值之后就進入老年代。預設(shè)值為15 |
-XX:+UseAdaptiveSizePolicy | 動態(tài)調(diào)整Java堆中各個區(qū)域的大小以及進入老年代的年齡 |
-XX:ParallelGCThreads=n | 設(shè)置并行收集器收集時使用的CPU數(shù)。并行收集線程數(shù) |
-XX:MaxGCPauseMillis=n | 設(shè)置并行收集最大暫停時間 |
-XX:GCTimeRatio=n | 設(shè)置垃圾回收時間占程序運行時間的百分比。公式為1/(1+N) |
-XX:+UseThreadPriorities | 啟用本地線程優(yōu)先級 |
-XX:-DisableExplicitGC | 禁止調(diào)用System.gc() ;但jvm的gc仍然有效 |
-XX:+MaxFDLimit | 最大化文件描述符的數(shù)量限制 |
前面6個參數(shù)都是關(guān)于垃圾收集器的行為參數(shù),也是經(jīng)常會用到的參數(shù)。
調(diào)試參數(shù)
參數(shù)及其默認值 | 描述 |
---|---|
-XX:-CITime | 打印消耗在JIT編譯的時間 |
-XX:ErrorFile=./hs_err_pid\ | 保存錯誤日志或者數(shù)據(jù)到文件中 |
-XX:HeapDumpPath=./java_pid\ | 指定導出堆信息時的路徑或文件名 |
-XX:-HeapDumpOnOutOfMemoryError | 當首次遭遇OOM時導出此時堆中相關(guān)信息 |
-XX:OnError="\ | 出現(xiàn)致命ERROR之后運行自定義命令 |
-XX:OnOutOfMemoryError="\ | 當首次遭遇OOM時執(zhí)行自定義命令 |
-XX:-PrintClassHistogram | 遇到Ctrl-Break后打印類實例的柱狀信息,與jmap -histo 功能相同 |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break后打印并發(fā)鎖的相關(guān)信息,與jstack -l 功能相同 |
-XX:-PrintCommandLineFlags | 打印在命令行中出現(xiàn)過的標記 |
-XX:-PrintCompilation | 當一個方法被編譯時打印相關(guān)信息 |
-XX:-PrintGC | 每次GC時打印相關(guān)信息 |
-XX:-PrintGCDetails | 每次GC時打印詳細信息 |
-XX:-PrintGCTimeStamps | 打印每次GC的時間戳 |
-XX:-TraceClassLoading | 跟蹤類的加載信息 |
-XX:-TraceClassLoadingPreorder | 跟蹤被引用到的所有類的加載信息 |
-XX:-TraceCla***esolution | 跟蹤常量池 |
-XX:-TraceClassUnloading | 跟蹤類的卸載信息 |
-XX:-TraceLoaderConstraints | 跟蹤類加載器約束的相關(guān)信息 |
以上是“Java虛擬機中常用vm參數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!