Java8 jvm引數簡介
一、用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
: 類指標壓縮空間大小, 預設為1GG1HeapRegionSize
: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
。