JVM内存布局
- 虚拟机栈
- 堆
- 元空间
- 程序计数器
- 本地方法栈
虚拟机栈
堆
一般分为新生代和老年代,默认空间占比为1:2
新生代
又分为伊甸区(Eden)、S0、S1(Survive区*2),默认空间占比为8:1:1
- 伊甸区:用于在空间足够存储对象时,分配给对象
- Survive区:用于作为复制算法的存活对象复制目标
因为对象多为朝生夕死,GC时对象多被回收,仅少数对象需要保留,新生代一般使用复制算法进行垃圾回收,S0和S1交替作为SurviveFrom和SurviveTo区,作为复制的目标。
若该区域空间不足以存下存活对象,或对象存活次数超出了阈值(默认为15),对象将被移至老年代。
老年代
用于存储存活次数超过预期的长期对象,或新生代空间不足以分配的大对象
该区域对象存活率较高,通常使用标记-清除算法进行垃圾回收。
标记算法(可达性分析):三色标记算法等
元空间
程序计数器
本地方法栈
其他
- 堆外内存