首页 > 内存

内存一二三四代的区别

代 描述 特点 第一代 新生代

  • 对象创建区域,对象最初分配到该区域。

  • 空间较小,GC 频率较高。

  • 使用复制算法进行垃圾回收,效率较高。


第二代 幸存区

  • 第一代中存活下来的对象会被移动到该区域。

  • 空间比第一代大,GC 频率较低。

  • 使用标记-整理算法进行垃圾回收。


第三代 老年代

  • 第二代中存活下来的对象会被移动到该区域。

  • 空间最大,GC 频率最低。

  • 使用标记-整理或标记-清除算法进行垃圾回收。


第四代 永久代/元空间

  • 存放类信息、方法信息、常量等元数据。

  • 在 Java 8 中被元空间取代。

  • GC 频率非常低。




专业角度介绍内存一二三四代的区别
内存代是指 JVM 堆内存的划分方式,目的是为了提高垃圾回收效率。 堆内存被分为新生代、老年代和永久代/元空间。
新生代 (Young Generation):用于存放新创建的对象,其空间较小,GC 频率较高。 新生代又进一步划分为 Eden 区和 Survivor 区 (通常分为两个:S0 和 S1),新创建的对象通常分配在 Eden 区。 当 Eden 区满了时,就会触发一次 Minor GC,将 Eden 区和 Survivor 区中存活的对象复制到另一个 Survivor 区,并将 Eden 区清空。 如果 Survivor 区也满了,则将部分对象晋升到老年代。
老年代 (Old Generation):用于存放存活时间较长的对象,其空间较大,GC 频率较低。 当对象在新生代经历多次 GC 后仍然存活,就会被晋升到老年代。 老年代的垃圾回收称为 Major GC 或 Full GC,通常会比 Minor GC 慢很多。
永久代/元空间 (Permanent Generation/Metaspace):用于存放类的元数据,包括类信息、方法信息、常量等。 在 Java 8 中,永久代被元空间取代,元空间不再属于堆内存,而是使用本地内存。
内存代之间的区别主要体现在以下几个方面:
空间大小:新生代空间最小,老年代空间最大,永久代/元空间的规模通常由系统内存大小决定。
GC 频率:新生代的 GC 频率最高,老年代的 GC 频率最低,永久代/元空间的 GC 频率最低。
垃圾回收算法:新生代使用复制算法,老年代使用标记-整理或标记-清除算法,永久代/元空间使用标记-整理或标记-清除算法。
内存代的划分可以有效地提高垃圾回收效率,因为它可以针对不同类型的对象进行不同的垃圾回收策略,从而减少 GC 停顿时间,提高系统性能。

返回顶部