Bootstrap

【jvm】新生代和老年代

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的频率较低,但回收耗时较长,因为需要扫描整个老年代。
;