jvm堆中如何分代

JVM的堆内存是按照新生代和老年代进行分代的,这种分代的设计是为了更高效地处理不同生命周期的对象。在JDK 1.7和JDK 1.8中,堆内存的分代设计略有不同,下面将对两个版本进行详细解释。

JDK 1.7中的分代堆结构

在JDK 1.7中,堆内存一般被分为三个区域:新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation)。新生代又细分为三个区:Eden区、SurvivorFrom、ServivorTo区,三个区的默认比例为:8:1:1。

  1. 新生代(Young Generation)

    • Eden区:新创建的对象首先被分配到Eden区。
    • Survivor区:Eden区中经过一次Minor GC(新生代的垃圾收集)后仍然存活的对象会被移动到Survivor区,同时也会有一部分对象从一个Survivor区移到另一个Survivor区。
  2. 老年代(Old Generation)

    • 存放长期存活的对象,一般需要经过多次Minor GC后才会晋升到老年代。
  3. 永久代(Permanent Generation)

    • 用于存放类的元数据、常量池等信息,这部分空间在JDK 1.8中被移除,取而代之的是元空间(Metaspace)。

JDK 1.8中的分代堆结构

在JDK 1.8中,移除了永久代,取而代之的是元空间(Metaspace)。

  1. 新生代和老年代

    • 新生代和老年代的概念和处理方式基本保持不变,但这两代的空间布局、内存分配和回收策略得到了一些优化,例如G1垃圾收集器的引入等。
  2. 元空间(Metaspace)

    • 元空间被用来替代永久代,它存放类的元数据,和类相关的字符串常量池等。相比于永久代,元空间的大小可以动态调整,减少了一些永久代的常见问题例如内存溢出等。

值得注意的是,从JDK 9开始,永久代被彻底移除,之后的版本仍然沿用元空间来代替。这些改进使得JVM在内存管理方面变得更加灵活和高效。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值