Runtime Data Area 运行时数据区
- 方法区 Method Area,存储类的静态变量,常量,类方法。在HotSpot虚拟机中,称之为 MetaSpace 元空间
- 堆Heap,运行时 存储引用对象
- Java栈 Java Stack,Java方法执行的内存模型,每个方法在执行的时候都会压栈和出栈
- 本地方法栈Native Method Stack,本地方法为虚拟机使用到的Native方法服务
- PC寄存器Program Counter Registers,负责记录正在执行的虚拟机字节码指令地址,即当前线程执行的字节码的行号指示器
堆Heap
- 伊甸园区 Eden
- S0(Survivor 0)和 S1(Survivor 1)
- 老年代 Old Memory
Heap中存在GC机制,Minor GC 专门处理 年轻代(伊甸园区,S0,S1)和Major GC专门处理老年代,采用了标记清除算法。
从新生代到老年代的垃圾回收机制如下:
- Eden满时,会触发 Minor GC,清理Eden区域,并将剩下的对象存入S0区。
- Eden再次满时,会触发 Minor GC,清理(Eden和S0)的对象,并将剩余的对象存入S1区。
- Eden再次满时,会触发 Minor GC,清理(Eden和S1)的对象,并将剩余的对象存入S0区。
后面程序会 不断重复进行 第2步 和 第3步,当一个对象经历了15次Minor GC 并没有被清除时,对象会被移入 老年代。同时,在年轻代中,大于Threshold(门槛)的对象,可以理解为较大的对象也会被直接 移入 老年代。