1. 程式人生 > >Java8 jvm引數簡介

Java8 jvm引數簡介

一、用jmap命令輸出
用jmap輸出

二、解析

  • MaxHeapFreeRatio: GC後如果發現空閒堆記憶體佔到整個預估堆記憶體的N%(百分比),則收縮堆記憶體的預估最大值, 預估堆記憶體是堆大小動態調控的重要選項之一. 堆記憶體預估最大值一定小於或等於固定最大值(-Xmx指定的數值). 前者會根據使用情況動態調大或縮小, 以提高GC回收的效率
  • MinHeapFreeRatio:GC後如果發現空閒堆記憶體佔到整個預估堆記憶體的N%(百分比), 則放大堆記憶體的預估最大值

  • MaxHeapSize:-Xmx, 堆記憶體大小的上限

  • InitialHeapSize:-Xms, 堆記憶體大小的初始值

  • NewSize:新生代預估堆記憶體佔用的預設值

  • MaxNewSize:新生代佔整個堆記憶體的最大值

  • OldSize:老年代的預設大小, default size of the tenured generation

  • NewRatio: 老年代對比新生代的空間大小, 比如2代表老年代空間是新生代的兩倍大小. The ratio of old generation to young generation.

  • SurvivorRatio:Eden/Survivor的值. 這個值的說明, 很多網上轉載的都是錯的. 8表示Survivor:Eden=1:8, 因為survivor區有2個, 所以Eden的佔比為8/10. Ratio of eden/survivor space size. -XX:SurvivorRatio=6 sets the ratio between each survivor space and eden to be 1:6, each survivor space will be one eighth of the young generation.

  • MetaspaceSize: 分配給類元資料空間的初始大小(Oracle邏輯儲存上的初始高水位,the initial high-water-mark ). 此值為估計值. MetaspaceSize設定得過大會延長垃圾回收時間. 垃圾回收過後, 引起下一次垃圾回收的類元資料空間的大小可能會變大

  • MaxMetaspaceSize: 是分配給類元資料空間的最大值, 超過此值就會觸發Full GC. 此值僅受限於系統記憶體的大小, JVM會動態地改變此值

  • CompressedClassSpaceSize: 類指標壓縮空間大小, 預設為1G

  • G1HeapRegionSize:G1區塊的大小, 取值為1M至32M. 其取值是要根據最小Heap大小劃分出2048個區塊.With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb. Sets the size of a G1 region. The value will be a power of two and can range from 1MB to 32MB. The goal is to have around 2048 regions based on the minimum Java heap size.

1、指標壓縮1. 64位平臺上預設開啟

  • 使用-XX:+UseCompressedOops壓縮物件指標
    "oops"指的是普通物件指標("ordinary" object pointers)。
    Java堆中物件指標會被壓縮成32位。
    使用堆基地址(如果堆在低26G記憶體中的話,基地址為0)

  • 使用-XX:+UseCompressedClassPointers選項來壓縮類指標
    物件中指向類元資料的指標會被壓縮成32位
    類指標壓縮空間會有一個基地址

2、元空間和類指標壓縮空間的區別

  • 類指標壓縮空間只包含類的元資料,比如InstanceKlass, ArrayKlass
    僅當打開了UseCompressedClassPointers選項才生效
    為了提高效能,Java中的虛方法表也存放到這裡
    這裡到底存放哪些元資料的型別,目前仍在減少

  • 元空間包含類的其它比較大的元資料,比如方法,位元組碼,常量池等。

三、用jstat命令輸出
這裡寫圖片描述

四、解析

  • S0: Survivor 0區的空間使用率 Survivor space 0 utilization as a percentage of the space's current capacity.
  • S1: Survivor 1區的空間使用率 Survivor space 1 utilization as a percentage of the space's current capacity.
  • E: Eden區的空間使用率Eden space utilization as a percentage of the space's current capacity.
  • O:老年代的空間使用率 Old space utilization as a percentage of the space's current capacity.
  • M:元資料的空間使用率Metaspace utilization as a percentage of the space's current capacity.
  • CCS:類指標壓縮空間使用率 Compressed class space utilization as a percentage.
  • YGC:新生代GC次數 Number of young generation GC events.
  • YGCT: 新生代GC總時長 Young generation garbage collection time.
  • FGC: Full GC次數Number of full GC events.
  • FGCT: Full GC總時長 Full garbage collection time.
  • GCT:總共的GC時長 Total garbage collection time.

  • 記錄GC日誌

  • 加入引數

-verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log XX:+PrintGCTimeStamps -XX:+PrintGCDetails
export JAVA_HOME=/opt/java/jdk1.8.0_101
export CATALINA_HOME=/opt/tomcat/apache-tomcat-8.0.36-redis
export CATALINA_BASE=/home/tomcat/tomcat8_jdk8
export JAVA_OPTS="-server -Xms1280m -Xmx1280m -XX:MaxNewSize=896m -Djava.awt.hea
dless=true -verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log -XX:+PrintGCTimeStamps
 -XX:+PrintGCDetails"
cd $CATALINA_HOME/bin
./catalina.sh start
  • jvm程序不明原因退出, 可以檢視syslog, 位置是 /var/log/messages