- 运行时数据区
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
/**
* -Xms120M -Xmx300M -XX:+PrintGCDetails
*
*/
public static void main(String[] args) {
ManagementFactory.getMemoryPoolMXBeans().forEach(mxBean -> {
System.out.printf("[%s]:%dK used %dK\n", mxBean.getName(),
mxBean.getUsage().getInit() / 1024,
mxBean.getUsage().getUsed() / 1024);
});
}
[Code Cache]:2496K used 1439K
[Metaspace]:0K used 4768K
[Compressed Class Space]:0K used 537K
[PS Eden Space]:30720K used 5533K
[PS Survivor Space]:5120K used 0K
[PS Old Gen]:81920K used 0K
Heap
PSYoungGen total 35840K, used 6148K [0x00000000f9c00000, 0x00000000fc400000, 0x0000000100000000)
eden space 30720K, 20% used [0x00000000f9c00000,0x00000000fa201090,0x00000000fba00000)
from space 5120K, 0% used [0x00000000fbf00000,0x00000000fbf00000,0x00000000fc400000)
to space 5120K, 0% used [0x00000000fba00000,0x00000000fba00000,0x00000000fbf00000)
ParOldGen total 81920K, used 0K [0x00000000ed400000, 0x00000000f2400000, 0x00000000f9c00000)
object space 81920K, 0% used [0x00000000ed400000,0x00000000ed400000,0x00000000f2400000)
Metaspace used 4774K, capacity 4926K, committed 4992K, reserved 1056768K
class space used 538K, capacity 598K, committed 640K, reserved 1048576K
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)
老年代
参考文献