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)
老年代
参考文献