JVM常用參數詳解


 

 JVM整個堆大小=年輕代大小 + 年老代大小 + 持久代大小,在JDK1.8及之后的版本由於永久代被元空間替代,所以jdk1.8中的堆=年輕代大小 + 年老代大小。本文使用的是JDK1.8

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

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

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

 

 

 

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

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

 

 

 3、-Xmn:設置年輕代大小。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

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

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

 

 

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

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

 

 

 老年代被相應的減少

4、元空間-XX:MetaspaceSize :初始化的Metaspace大小,控制元空間發生GC的閾值。GC后,動態增加或降低MetaspaceSize。在默認情況下,這個值大小根據不同的平台在12M到20M浮動。

   -XX:MaxMetaspaceSize:限制Metaspace增長的上限,防止因為某些情況導致Metaspace無限的使用本地內存,影響到其他程序。在本機上該參數的默認值為4294967295B(大約4096MB)

 

 

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

 

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

 

6、-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

 

7、 -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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM