JVM調優原則

JVM調優原則算法

調優目標

  1. 將進入老年代的對象數量降到最低緩存

  2. 減小 Full GC 的執行時間服務器

在一樣場景下,採用多個機器上進行參數調整後的比較驗證,將驗證可以提升性能的參數應用到最終全部服務器上。性能

通常常規

知足下列不須要優化優化

Minor GC執行時間不到50ms;
Minor GC執行不頻繁,約10秒一次;
Full GC執行時間不到1s;
Full GC執行頻率不算頻繁,不低於10分鐘1次;


spa

基本思想

針對JVM堆的設置

通常能夠經過-Xms -Xmx限定其最小、最大值,爲了防止垃圾收集器在最小、最大之間收縮堆而產生額外的時間,一般把最大、最小設置爲相同的值;操作系統

年輕代和年老代

根據默認的比例(1:2)分配堆內存, 能夠經過調整兩者之間的比率NewRadio來調整兩者之間的大小。線程

如年輕代,經過 -XX:newSize -XX:MaxNewSize來設置其絕對大小。一樣,爲了防止年輕代的堆收縮,咱們一般會把-XX:newSize -XX:MaxNewSize設置爲一樣大小。對象

年輕代和年老代設置多大才參考:生命週期

  1. 更大的年輕代必然致使更小的年老代,大的年輕代會延長普通GC的週期,但會增長每次GC的時間,小的年老代會致使更頻繁的Full GC。

  2. 更小的年輕代必然致使更大年老代,小的年輕代會致使普通GC很頻繁,但每次的GC時間會更短,大的年老代會減小Full GC的頻率。

如何選擇應該依賴應用程序對象生命週期的分佈狀況:若是應用存在大量的臨時對象,應該選擇更大的年輕代;若是存在相對較多的持久對象,年老代應該適當增大。但不少應用都沒有這樣明顯的特性。

在抉擇時應該根據如下兩點:

  1. 本着Full GC儘可能少的原則,讓年老代儘可能緩存經常使用對象,JVM的默認比例1:2也是這個道理 。

  2. 經過觀察應用一段時間,看其餘在峯值時年老代會佔多少內存,在不影響Full GC的前提下,根據實際狀況加大年輕代,好比能夠把比例控制在1:1。但應該給年老代至少預留1/3的增加空間。

配置較好的機器

好比多核、大內存機器,能夠爲年老代選擇並行收集算法:-XX:+UseParallelOldGC 。

線程堆棧的設置

每一個線程默認會開啓1M的堆棧,用於存放棧幀、調用參數、局部變量等,對大多數應用而言這個默認值太了,通常256K就足用。

理論上,在內存不變的狀況下,減小每一個線程的堆棧,能夠產生更多的線程,但這實際上還受限於操做系統。

若是你以爲文章不錯,文末的贊 ???? 又回來啦,記得給我「點贊」和「在看」哦~

相關文章
相關標籤/搜索