目录
1. 说明
- 1.在Java虚拟机(JVM)中,新生代(Young Generation)和老年代(Old Generation)是垃圾回收(GC)机制中两个非常重要的概念,它们共同构成了堆内存(Heap)的主要部分。
2. 新生代(Young Generation)
2.1 定义与用途
- 1.新生代是JVM中用于存放新创建的对象的内存区域。
- 2.它被进一步划分为Eden区和两个Survivor区(通常为From和To区,有时也称为S0和S1区)。
2.2 内存分配与回收
- 1.新创建的对象首先被分配到Eden区。
- 2.当Eden区满时,会触发Minor GC(小型垃圾回收),将存活的对象转移到Survivor区中的一个(通常是Survivor From区)。
- 3.在下一次Minor GC时,存活的对象会从当前的Survivor区移动到另一个Survivor区(Survivor To区),并清空原来的Survivor区。
- 4.对象在Survivor区中的存活次数(称为年龄)达到某个阈值(默认是15)时,会被晋升到老年代。
2.3 特点
- 1.新生代的空间相对较小,用于快速回收大量短命对象。
- 2.Minor GC的频率较高,但回收效率也很高。
- 3.绝大部分的Java对象的销毁都在新生代进行。
- 4.IBM公司的专门研究表明,新生代中80%的对象都是朝生夕死的。
3. 老年代(Old Generation)
3.1 定义与用途
- 1.老年代是JVM中用于存放长时间存活的对象的内存区域。
- 2.当对象经过多次Minor GC仍然存活,或者对象太大无法直接放入新生代时,它们会被晋升到老年代。
3.2 内存分配与回收
- 1.老年代的空间较大,用于存放存活时间较长的对象。
- 2.当老年代空间满时,会触发Major GC(大型垃圾回收)或Full GC(全局垃圾回收),这会涉及到整个堆内存的垃圾回收操作。
3.3 特点
- 1.老年代的空间增长相对较慢,因为大多数对象在新生代中就已经被回收。
- 2.Major GC的频率较低,但回收耗时较长,因为需要扫描整个老年代。