(后邊學習到新的會進行補充)
-XX:MaxTenuringThreshold:物件晉升老年代的閾值,默認值15(并不是絕對的,如果在Survivor空間中相同年齡所有物件大小的綜合大于Survivor空間的一半,年齡大于或等于該年齡的物件就可以直接進入老年代)-XX:MaxPermSize~~:永久代大小-XX:MaxDirectMemorySize:直接記憶體大小,默認與-Xmx一致-XX:+/-UseTLAB:是否開啟TLAB-XX:MaxMetaspace=256m:元資料區,默認為無限大,受Java行程所使用的記憶體影響-XX:FieldsAllocationStyle:物件記憶體分布中的實體資料區域的存盤順序-XX:CompactFields=true:由于HotSpot在分配物件實體資料時相同大小的欄位總是被分配到一起存盤,在滿足這個條件下因此父類中定義的變數會出現在子類之前,開啟此引數那子類中較小的變數也允許插入父類變數的空隙中,以節省一點空間-XX:+UseCondCardMark:是否開啟JVM卡表條件判斷,盡量減少偽共享帶來的性能損耗-XX:MaxGCPauseMillis(毫秒 >0):控制最大垃圾收集停頓時間,默認值200-XX:ParallelGCThreads=NUM:垃圾收集并行執行執行緒數,默認為CPU的核數-XX:+UseAdaptiveSizePolicy:是否開啟自適應調節策略,JDK8默認開啟-XX:SurvivorRatio:Eden和Survivor區的比例-XX:PretenureSizeThreshold:晉升老年代物件大小,超過指定大小直接在老年代分配,默認為0-XX:+PrintGCDetails:列印GC詳細日志-XX:+PrintHeapAtGC:列印每次GC前后堆、方法區可用容量變化-XX:+PrintGCApplicationConcurrentTime :查看GC程序中用戶執行緒并發時間-XX:+PrintGCApplicationStoppedTime:查看GC程序中用戶執行緒停頓時間-XX:+PrintFlagsFinal:查看JVM引數的默認值
垃圾收集器相關:
CMS相關見文章
-XX:+UseConMarkSweepGC:開啟使用CMS垃圾收集器,新生代使用ParNew 老年代使用CMS-XX:CMSInitiatingOccupancyFraction=70:CMS垃圾收集器的回收閾值(老年代),JDK5及之前默認為68%,JDK6之后調整為92%,-XX:+UseCMSInitiatingOccupancyOnly:與XX:CMSInitiatingOccupancyFraction配合使用,只是用設定的回收閾值(上面指定的70%),如果不指定,JVM僅在第一次使用設定值,后續則自動調整,-XX:+/-CMSPrecleaningEnabled:開啟/關閉CMS并發預清理,
-XX:CMSScheduleRemarkEdenSizeThreshold:CMS可取消并發預處理階段開啟條件-->默認為2M-XX:CMSMaxAbortablePrecleanLoops:CMS可取消并發預處理階段取消條件-->回圈次數,默認為0-XX:CMSMaxAbortablePrecleanTime:CMS可取消并發預處理階段取消條件-->最長執行時間,默認為5000毫秒-XX:CMSScheduleRemarkEdenPenetration:CMS可取消并發預處理階段取消條件-->Eden區的記憶體使用率大于此配置后取消,默認值為50-XX:+UseCMSCompactAtFullCollection:在進行Full GC之前進行一次記憶體整理,默認開啟-XX:CMSFullGCBeforeCompaction=N:當執行過N此無碎片整理Full GC后,下次Full GC之前進行一次記憶體整理,默認為0,表示每次都進記憶體整理-XX:+CMSScavengeBeforeRemark:強制在CMS最終/重標記階段前進行一次Minor GC,防止可中斷預清理一直沒有等到年輕代Minor GC而導致年輕代物件太多而導致最終標記時間過長,導致停頓時間過長-XX:+CMSPermGenSweepingEnabled:開啟CMS對永久代(元空間)的垃圾收集,默認不開啟
-XX:+CMSClassUnloadingEnabled:與-XX:+CMSPermGenSweepingEnabled配合使用,收集永久代時卸載不用的類
G1l垃圾收集器-XX:G1HeapRegionSize=8:設定G1垃圾收集器Region大小,取值范圍應為1MB ~ 32MB,且應為2的N次冪,-XX:G1NewSizePercent:新生代最小值,默認值5%-XX:G1MaxNewSizePercent:新生代最大值,默認值60%-XX:ParallelGCThreads:STW期間,并行GC執行緒數-XX:ConcGCThreads=n:并發標記期間,GC執行緒數-XX:InitiatingHeapOccupancyPercent:設定觸發標記周期的 Java 堆占用率閾值,默認值是45%,這里的java堆占比指的是nonyoungcapacitybytes,包括old+humongous-XX:G1HeapWastePercent:G1停止回收的最小記憶體,默認是堆的5%,就是說不必要每次回收就把所有的垃圾的處理完,可遺留少量的下次處理,這樣也降低了單次GC消耗的時間-XX:+GCTimeRatio:計算花在Java應用執行緒上和花在GC執行緒上時間比率,默認是9,跟新生代記憶體的分配比例一樣,引數的主要目的是讓用戶可以控制花在應用上的時間,G1的計算公式是100/(1+GCTimeRatio),如果引數設定為9,則最多花10%的時間在GC上面,Parallel GC默認值是99,表示1%的時間被用在GC上面,這是因為Parallel GC貫穿整個GC,而G1則根據Region來進行劃分,不需要全域性掃描整個記憶體-XX:G1ReserverPercent:G1為分配擔保預留的空間比例,默認10%,也就是老年代會預留10%的空間來給新生代物件晉升,如果經常由于新生代物件晉升失敗導致FullGC,可以適當調大此引數(調大此引數同時意味著老年代可使用的空間減少)
堆記憶體引數

-Xmx:指定最大堆記憶體,如-Xmx49,但這只是限制了堆記憶體Heap部分的最大值,不包括堆外記憶體和堆疊記憶體-Xms:指定堆記憶體的初始化大小,最小值,如Xms4g,而且指定的記憶體大小,并不是作業系統實際分配的初始值,而是GC先規劃好,應用到才分配,專用服務需上需要保持-Xmx和-Xms保持一致,否則應用剛啟動可能就會有好幾個FullGC,當兩者配置不同時,堆記憶體擴容可能導致性能抖動,-Xmn:等價于-XX:NewSize,Young區的大小,使用G1垃圾收集器不應該設定該選項,在其他的某些業務場景可以設定,官方建議設定為-Xmx的1/2~1/4-XX:MaxPerSize:這是jdk1.7前使用的,JDK8后Meta空間默認無限大,此引數無效-XX:MetaspeaceSize:Java8默認不限制Meta空間,一般不允許設定該選項-XX:MaxDirectMemorySize:系統可食用的最大堆外記憶體,這個引數跟-Dsun.nio.MaxDirectMemorySize=1m等價-Xss:設定每個執行緒堆疊的位元組數,影響堆疊的深度
分析診斷相關
-XX:+-HeapDumpOnOutOfMemoryError:當OOMError產生時,自動Dump堆記憶體-XX:HeapDumpPath:與HeapDumpOnOutOfMemoryError搭配使用,指定記憶體溢位時Dump檔案的目錄,默認為啟動Java程式的作業目錄下-XX:OnError:發生致命錯誤時執行的腳本-XX:OnOutOfMemoryError:拋出OOMError錯誤是執行的腳本-XX:ErrorFile=fileName:致命錯誤的日志檔案名,絕對路徑或者相對路徑-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506:開啟遠程除錯
?
運行模式
-server:設定JVM使用server模式,特點是啟動速度比較慢,但運行時性能和記憶體管理效率很高,適用于生產環境,在具有64位JDK環境下將默認啟用此模式,而忽略-client引數-clinet:JDK1.7之前在32位的X86機器上的默認值是-client選項,設定JVM使用client模式,特點是啟動速度較快,但運行時性能和記憶體管理效率不高,通常用于客戶端程式或者本地PC機開發和除錯,-Xint:在解釋模式下運行,-Xint標記會強制JVM解釋所有的位元組碼,這會降低運行速度,通常低10倍或者更多-Xcomp:-Xcomp引數與-Xint正好相反,JVM會在第一次使用時把所有的位元組碼編譯成本地代碼,從而帶來最大程度的優化,[注意預熱]-Xmixed:-Xmixed是混合模式,將解釋模式和編譯模式進行混合使用,有JVM自己決定,這是JVM的默認模式,也是推薦模式,使用java -version可以看到 mixed mode等資訊;

編譯優化
-XX:+DoEscapeAnalysis:開啟逃逸分析-XX:+EliminateAllocations:開啟標量替換-XX:+EliminateLocks :開啟同步消除
相關文章見:編譯優化技術
參考資料:
- 官方最全JVM引數清單:https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322959.html
標籤:Java
