JVM GC
- 运行时数据区
- GC的介绍
- 常用的工具
版本说明:
JDK 1.8.0_202命名行参数选用linux版本说明符号约定
*size*内存大小,默认单位为byte,其他单位k(K)、m(M)以及g(G)
运行时数据区
PC寄存器
栈(JAVA栈)
本地变量表
操作栈
动态链接
本地方法栈
方法区
元空间
堆
堆的大小控制参数
- 非标准参数 - -Xms*size*堆的初始化大小,不进行设置默认是新生代和老年代大小之和,必须是1024的倍数并且大于1MB
- -Xmx*size*堆的最大值,必须是1024的倍数并且大于2MB,server配置一般与堆的大小保持一致- 等同于 - -XX:MaxHeapSize=*size*
 
- GC参数- -XX:InitialHeapSize=*size*堆的初始化大小,值必须为0,1024的倍数并且大于1M,默认值根据系统运行时配置,配置为0时,大小为新生代和老年代大小之和
- -XX:MaxHeapSize=*size*堆的最大大小,必须是1024的倍数并且大于2MB
 
堆包含新生代和老年代,默认比例是通过-XX:NewRatio=*ratio* 进行设置,默认值为2,也就是新生代占堆的总空间的1/3,其老年代占堆的总空间的2/3
| 1 |  | 
| 1 |  | 
PSYoungGen total 35840K 此值大小不对,应该还要加上5120K
新生代的大小 35840+5120K,老年代的大小为81920K ,老年代与新生代的比例刚好是2
新生代
新生代的大小控制参数
- 非标准参数 - -Xmn*size*新生代的初始以及最大大小- 可以使用下面两个参数进行替换 - -XX:NewSize=size新生代的初始大小
- -XX:MaxNewSize=size新生代的最大大小
 
 
- GC参数- -XX:MaxNewSize=*size*新生代的最大大小,默认值是最大性能的值
- -XX:NewSize=*size*新生代的初始大小,建议为整个堆内存的1/2-1/4- 等同于-Xmn 
 
新生代包含Eden和两个Survivor(from和to)区,默认比例为8:1:1,是由参数-XX:InitialSurvivorRatio=*ratio* 控制, 在-XX:+UseParallelGC或者-XX:+UseParallelOldGC下的幸存区的初始化比例。根据-XX:+UseParallelGC或者-XX:+UseParallelOldGC自适应分配大小并且根据应用的行为重新分配大小,这个只表示开始的初始化值。若是关闭自适应分配大小(-XX:-UseAdaptiveSizePolicy),需要用-XX:SurvivorRatio 幸存区的比例大小。默认值是8,幸存区大小的计算公式为S=Y/(R+2)
老年代
参考文献