JVM 內存區域大小參數設置

JVM內存包括區域

Heap(堆區)
  New Generation(新生代)
  Eden 伊甸園
  Survivor From
  Survivor To
  Old Generation(老年代)
方法區
  Permanent Generation(持久代)
  Stack(棧區)
  Metaspace(元空間)
  Direct ByteBuffer(堆外內存)
通過JVM啓動參數來配置以上內存空間
  Heap(堆)內存大小設置
  -Xms512m 設置JVM堆初始內存爲512M
  -Xmx1g 設置JVM堆最大可用內存爲1G

New Generation(新生代)內存大小設置
  -Xmn256m 設置JVM的新生代內存大小(-Xmn 是將NewSize與MaxNewSize設爲一致。256m),同下面兩個參數
  -XX:NewSize=256m
  -XX:MaxNewSize=256m

通過新生代和老年代內存的比值來設置新生代大小
  -XX:NewRatio=3
  設置新生代(包括Eden和兩個Survivor區)與老年代的比值。設置爲3,則新生代與老年代所佔比值爲1:3,新生代佔整個堆棧的1/4

Survivor內存大小設置
  -XX:SurvivorRatio=8
  設置爲8,則兩個Survivor區與一個Eden區的比值爲2:8,一個Survivor區佔整個新生代的1/10

Eden內存大小設置
新生代減去2*Survivor的內存大小就是Eden的大小

Old Generation(老年的)的內存大小設置
  堆內存減去新生代內存
  如上面設置的參數舉例如下:
  老年代初始內存爲:512M-256M=256M
  老年代最大內存爲:1G-256M=768M

Stack(棧)內存大小設置
  -Xss1m
  每個線程都會產生一個棧。在相同物理內存下,減小這個值能生成更多的線程。如果這個值太小會影響方法調用的深度

Permanent Generation(持久代)內存大小設置
  方法區內存分配(JDK8以前的版本使用,JDK8以後沒有持久代了,使用的MetaSpace)
  -XX: PermSize=128m 設置持久代初始內存大小128M
  -XX:MaxPermSize=512m 設置持久代最大內存大小512M


Direct ByteBuffer(直接內存)內存大小設置
  -XX:MaxDirectMemorySize
  當Direct ByteBuffer分配的堆外內存到達指定大小後,即觸發Full GC。該值是有上限的,默認是64M,最大爲sun.misc.VM.maxDirectMemory()。
  在程序中可以獲得-XX:MaxDirectMemorySize的設置的值

設置新生代代對象進入老年代的年齡
  -XX:MaxTenuringThreshold=15

  設置垃圾最大年齡。如果設置爲0的話,則新生代對象不經過Survivor區,直接進入老年代。

  對於老年代比較多的應用,可以提高效率。如果將此值設置爲一個較大值,則新生代對象會在Survivor區進行多次複製,這樣可以增加對象在新生代的存活時間,增加在新生代即被回收的概論
  最大值爲15歲,因爲對象頭中用了4位進行存儲垃圾年齡 【1111(二進制)=15(十進制)】

不常用的參數
  -XX:MaxHeapFreeRatio=70
  GC後java堆中空閒量佔的最大比例,大於該值,則堆內存會減少

  -XX:MinHeapFreeRatio=40
  GC後java堆中空閒量佔的最小比例,小於該值,則堆內存會增加

  -XX:PretenureSizeThreshold=1024
  (單位字節)對象大小大於1024字節的直接在老年代分配對象

  -XX:TLABWasteTargetPercent =1
  TLAB佔eden區的百分比 默認1%

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章