JVM整個堆大小=年輕代大小 + 年老代大小 + 持久代大小,在JDK1.8及以後的版本因爲永久代被元空間替代,因此jdk1.8中的堆=年輕代大小 + 年老代大小。本文使用的是JDK1.8性能
一、堆大小設置(XX類型參數)spa
例如:-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