Software Construction之JVM

 

Memory

Stack:所有的局部的primitive和ref变量
Heap:所有的Object(局部的Object也是在Heap里,但局部的ref是stack)
Heap中有Method Area(Metaspace):类信息,常量,静态变量

GC

Mark-Sweep

标记是否存活,释放死亡的空间

Mark-Compact

标记是否存活,释放死亡的空间,然后碎片整理

Copy

标记是否存活,将活的整个复制到另一个空间

具体GC

年轻代:copy算法执行GC
老年代:Mark-Sweep或Mark-Compact算法执行GC
当某个区域满时,执行GC
年轻代执行minor GC,时间较短
年轻代中经历多轮minor GC后,copy到老年代
老年代满了之后,老年代执行full GC

设置各代空间大小

JVM命令

jmap

Heap Configuration:
MinHeapFreeRatio = 0    //JVM最小空闲比率 jvm heap 在使用率小于 n 时 ,heap 进行收缩
MaxHeapFreeRatio = 100  //JVM最大空闲比率 jvm heap 在使用率大于 n 时 ,heap 进行扩张 
MaxHeapSize = 2095054848 (1998.0MB) //JVM堆的最大大小
NewSize = 44040192 (42.0MB) //JVM新生代的默认大小
MaxNewSize = 698351616 (666.0MB) //JVM新生代的最大大小
OldSize = 88080384 (84.0MB) //JVM老生代的默认大小 
NewRatio = 2 //新生代:老生代(的大小)=1:2
SurvivorRatio = 8 //survivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域]
MetaspaceSize = 21807104 (20.796875MB) //元空间的默认大小,超过此值就会触发Full GC
CompressedClassSpaceSize = 1073741824 (1024.0MB) //类指针压缩空间的默认大小
MaxMetaspaceSize = 17592186044415 MB //元空间的最大大小
G1HeapRegionSize = 0 (0.0MB) //使用G1垃圾收集器的时候,堆被分割的大小