1. 程式人生 > >JVM歷險記第四章:終極殺器

JVM歷險記第四章:終極殺器

大法師的咒語竟然是在特定的環境中才能實現。這點我是萬萬沒有想到的。

具體說hotspot環境使用的最多。使用的還是三種大殺器

序列蒐集器的實現:serial(用於新生代,採用複製演算法)、serial old(用於年老代,採用標記/整理演算法)

並行蒐集器的實現:ParNew(用於新生代,採用複製演算法)、Parallel Scavenge(用於新生代,採用複製演算法)、Parallel old(用於年老代,採用標記/整理演算法)

併發蒐集器的實現:concurrent mark sweep[CMS](用於年老代,採用標記/清除演算法)

這幾種殺器其實就像殺蟲劑一樣。對於不同的田地使用不同的除草劑。

可以放出6中不同的大招。。

如果第一招使用了serial old那麼,第二招就可以使用serial 或者ParNew或者Parallel Scavenge

如果第一招使用了CMS,那麼第二招可以使用serial 或者ParNew

如果第一招使用Parallel old,那麼第二招只能Parallel Scavenge

套路不同結果不同。。。威力自然也不同,,對於大規模和小規模的堆放的招數肯定也不同。

還有不同攻擊力的配比值的符咒:

垃圾蒐集器選擇引數

          UseSerialGC:開啟此引數使用serial & serial old蒐集器(client模式預設值)。

          UseParNewGC:開啟此引數使用ParNew & serial old蒐集器(不推薦)。

          UseConcMarkSweepGC:開啟此引數使用ParNew & CMS(serial old為替補)蒐集器。

          UseParallelGC:開啟此引數使用parallel scavenge & parallel old蒐集器(server模式預設值)。

          UseParallelOldGC:開啟此引數在年老代使用parallel old蒐集器(該引數在JDK1.5之後已無用)。

JVM各個記憶體區域大小相關引數

          Xms:堆的初始值。預設為實體記憶體的1/64,最大不超1G。

          Xmx:堆的最大值。預設為實體記憶體的1/4,最大不超1G。

          Xmn:新生代的大小。

          Xss:執行緒棧大小。

          PermSize:永久代初始大小。預設為實體記憶體的1/64,最大不超1G。

          MaxPermSize:永久代最大值。預設為實體記憶體的1/4,最大不超1G。

          NewRatio:新生代與年老代的比例。比如為3,則新生代佔堆的1/4,年老代佔3/4。

          SurvivorRatio:新生代中調整eden區與survivor區的比例,預設為8,即eden區為80%的大小,兩個survivor分別為10%的大小。(備註:這個引數設定是講解複製演算法那一章中,解決複製演算法記憶體減半的辦法。eden區即是複製演算法一章中80%的那部分,而survivor區則是兩個10%的那部分。)

垃圾蒐集器效能通用引數

          PretenureSizeThreshold:晉升年老代的物件大小。預設為0,比如設為10M,則超過10M的物件將不在eden區分配,而直接進入年老代。

          MaxTenuringThreshold:晉升老年代的最大年齡。預設為15,比如設為10,則物件在10次普通GC後將會被放入年老代。

          DisableExplicitGC:禁用System.gc()。

並行蒐集器引數

          ParallelGCThreads:回收時開啟的執行緒數。預設與CPU個數相等。

          GCTimeRatio:設定系統的吞吐量。比如設為99,則GC時間比為1/1+99=1%,也就是要求吞吐量為99%。若無法滿足會縮小新生代大小。

          MaxGCPauseMillis:設定垃圾回收的最大停頓時間。若無法滿足設定值,則會優先縮小新生代大小,仍無法滿足的話則會犧牲吞吐量。

併發蒐集器引數

          CMSInitiatingOccupancyFraction:觸發CMS收集器的記憶體比例。比如60%的意思就是說,當記憶體達到60%,就會開始進行CMS併發收集。

          UseCMSCompactAtFullCollection:這個前面已經提過,用於在每一次CMS收集器清理垃圾後送一次記憶體整理。

          CMSFullGCsBeforeCompaction:設定在幾次CMS垃圾收集後,觸發一次記憶體整理。

我的天果然不是一般大師還真駕馭不了這種上乘的殺器。。。。。