以前全部關於JVM的知識,主要視爲JVM調優作準備的。
對於虛擬機的調優步驟,通常分爲3步:html
以上3步循環執行,最終目的是肯定好啓動參數。併發
考覈虛擬機的指標:jvm
通常虛擬機的所使用的內存是肯定的,優化指標主要體如今需求上是要低延遲仍是高吞吐量。工具
壓力測試的參數及接口主要看業務。性能
Jdk在jdk/bin目錄下自帶了一些可視化工具: 如jvisualvm和jconsole。
Jdk在運行時也可使用命令行來查看當前虛擬機的運行狀態:測試
壓測調優階段推薦使用可視化工具。線上緊急排查定位問題時使用命令行查看。優化
對於GC日誌來講,都是一些固定的格式,能看懂就行。spa
特別注意的是:啓動JVM後的操做系統自己的剩餘內存必定要足夠,在調優期間,要適當查看系統剩餘內存狀態,不能太低。操作系統
常見的GC方式:.net
JVM常見設置
堆設置
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:年輕代內存大小 -XX:NewRatio:設置年輕代和年老代的比值。
-XX:SurvivorRatio:年輕代中Eden區與兩個Survivor區的比值。
-XX:MaxPermSize:設置持久代大小,jdk1.7以前有效。1.8以後給爲元空間 -XX:MaxMetaspaceSize:設置元空間大小 -XX:PretenureSizeThreshold:直接晉升到老年代的對象大小。大於這個參數的對象將直接在老年代分配 -XX:MaxTenuringThrehold:晉升到老年代的對象年齡。當超過這個參數值時就進入老年代 -XX:+UseAdaptiveSizePolicy:動態調整Java堆中各個區域的大小以及進入老年代的年齡
收集器設置
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:+UseParalledlOldGC:設置並行年老代收集器
-XX:+UseParNewGC:在新生代使用並行收集器
-XX:+UseParallelGC :新生代使用並行回收收集器
-XX:+UseParallelOldGC:老年代使用並行回收收集器
-XX:+UseConcMarkSweepGC:新生代使用並行收集器,老年代使用CMS+串行收集器
垃圾回收統計信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
並行收集器設置
-XX:ParallelGCThreads=n:設置並行收集器收集時使用的CPU數。並行收集線程數
-XX:MaxGCPauseMillis=n:設置並行收集最大暫停時間
-XX:GCTimeRatio=n:設置垃圾回收時間佔程序運行時間的百分比。公式爲1/(1+n)
併發收集器設置
-XX:+CMSIncrementalMode:設置爲增量模式。適用於單CPU狀況
-XX:ParallelGCThreads=n:設置併發收集器年輕代收集方式爲並行收集時,使用的CPU數。並行收集線程數 -XX:ParallelCMSThreads:設定CMS的線程數量
-XX:CMSInitiatingOccupancyFraction:設置CMS收集器在老年代空間被使用多少後觸發
-XX:+UseCMSCompactAtFullCollection:設置CMS收集器在完成垃圾收集後是否要進行一次內存碎片的整理
-XX:CMSFullGCsBeforeCompaction:設定進行多少次CMS垃圾回收後,進行一次內存壓縮
-XX:+CMSClassUnloadingEnabled:容許對類元數據進行回收
-XX:CMSInitiatingPermOccupancyFraction:當永久區佔用率達到這一百分比時,啓動CMS回收
-XX:UseCMSInitiatingOccupancyOnly:表示只在到達閥值的時候,才進行CMS回收
參考資料: