分代回收简单来说是:不同生命周期的对象采用不同的垃圾回收策略
堆内存的划分为:新生代 老年代 永久代(在Java 8及以后版本中已被元空间Metaspace替代)
新生代
- 新生代划分为Eden区和两个Survivor区(通常命名为From和To或S0和S1)
- 新创建的对象分配到==>Eden区
- 经过一次回收(复制算法)(Minor GC,YoungGC,新生代回收),仍然存活==>Survivor区中的一个
- 经过几次回收,对象依然存在,(15次Minor GC)对象会晋升到老年代(Survivor区内存不足\大对象会提前晋升)
老年代
- 老年代回收主要采用标记-清除算法或标记-清除-整理算法,复制的成本较高
- 当老年代空间不足时,会触发Major GC(Full GC)