JVM經常使用參數詳解

 

 JVM整個堆大小=年輕代大小 + 年老代大小 + 持久代大小,在JDK1.8及以後的版本因爲永久代被元空間替代,因此jdk1.8中的堆=年輕代大小 + 年老代大小。本文使用的是JDK1.8性能

 一、堆大小設置(XX類型參數)spa

  • 初始化堆內存:-XX:InitialHeapSize=1024m(-Xms1024m -簡寫)
  • 最大堆內存:-XX:MaxHeapSize=1024m (-Xmx1024m -簡寫)

 例如:-Xms1024m -Xmx1024m -XX:+PrintGCDetails線程

 

 

 

二、-Xss:線程的堆棧大小:-Xss 默認是 512k~1024k 等價於 -XX:ThreadStackSize=512k 。該值等於零表示使用的是默認值。通常狀況下無需設置code

例如:-Xms1024m -Xmx1024m -Xss512m -XX:+PrintGCDetails
對象

 

 

 三、-Xmn:設置年輕代大小。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代通常固定大小爲64m,因此增大年輕代後,將會減少年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。blog

  是 -XX:NewSize   和  -XX:MaxNewSize 參數的簡寫新式內存

例如:-Xms1024m -Xmx1024m -Xss512m -XX:+PrintGCDetails   咱們不設置他的大小,看看默認值是否符合官方比例it

 

 

 結論:MaxNewSize*8/3=1024  符合io

 例如:-Xms1024m -Xmx1024m -Xmn512m -Xss512m -XX:+PrintGCDetails  設置年輕代大小class

 

 

 老年代被相應的減小

四、元空間-XX:MetaspaceSize :初始化的Metaspace大小,控制元空間發生GC的閾值。GC後,動態增長或下降MetaspaceSize。在默認狀況下,這個值大小根據不一樣的平臺在12M到20M浮動。

   -XX:MaxMetaspaceSize:限制Metaspace增加的上限,防止由於某些狀況致使Metaspace無限的使用本地內存,影響到其餘程序。在本機上該參數的默認值爲4294967295B(大約4096MB)

 

 

五、-XX:NewRatio
新生代(Eden + 2*S)與老年代(不包括永久區)的比值 例如-XX:NewRatio=4 表示新生代:老年代 = 1:4 即老年代佔整個對的4/5;默認值=2

 

例如:-Xms20m -Xmx20m -XX:+PrintGCDetails -XX:NewRatio=4

 

六、-XX:SurvivorRatio:2個Survivor區和Eden區的比值 例如:-XX:SurvivorRatio=8 表示 兩個Survivor區:Eden區=2:8 ,每一個Survivor佔 1/10 ;JVM默認=8

例如:-Xms20m -Xmx20m -XX:+PrintGCDetails -XX:NewRatio=4 -XX:SurvivorRatio=8

 

七、 -XX:MaxTenuringThreshold=3
該參數主要是控制新生代須要經歷多少次GC晉升到老年代中的最大閾值。在JVM中用4個bit存儲(放在對象頭中),因此其最大值是15。若是該值=0則表示對象在Eden區gc後不通過Survivor區直接進入老年代。若是該值等於15,並不是意味着,對象必需要經歷15次YGC纔會晉升到老年代中。例如,當survivor區空間不夠時,便會提早進入到老年代中,但這個次數必定不大於設置的最大閾值。經過控制對象進入老年代的頻率,能夠控制老年代內存的大小,以此控制老年代的gc次數

查看默認值:

F:\workspace\IDEA\study\jalja-base-utils>jinfo -flag MaxTenuringThreshold 46644
-XX:MaxTenuringThreshold=15
相關文章
相關標籤/搜索