jvm内存分区的变化

随着 JDK 版本的变化,JVM 内存分区方面有一些变化和调整。以下是主要的一些变化:

JDK 8 之前:

在 JDK 8 之前,HotSpot 虚拟机主要使用的是永久代(Permanent Generation)和堆内存(Heap Memory),其中永久代主要用于存储类的元数据、方法区、常量池等。具体内存分区如下:

  1. 堆内存(Heap Memory)

    • 主要用于存储对象实例和数组对象。
    • 可以通过 -Xms-Xmx 参数调整初始堆大小和最大堆大小。
  2. 永久代(Permanent Generation)

    • 用于存储类的元数据(Class Metadata)、方法区、常量池等。
    • 可以通过 -XX:PermSize-XX:MaxPermSize 参数调整初始永久代大小和最大永久代大小。

JDK 8 之后:

在 JDK 8 中,HotSpot 虚拟机对内存分配做了一些调整,主要是为了解决永久代内存泄漏等问题,引入了元空间(Metaspace)取代永久代。具体内存分区如下:

  1. 堆内存(Heap Memory)

    • 与之前一样,用于存储对象实例和数组对象。
    • 但是在 JDK 8 中引入了一些新的垃圾回收器,如 G1 垃圾回收器,提供更加灵活的堆内存管理策略。
  2. 元空间(Metaspace)

    • 用于存储类的元数据、方法区、常量池等。
    • 元空间不再受限于永久代的大小,而是由操作系统的本机内存支持。
    • 可以通过 -XX:MetaspaceSize-XX:MaxMetaspaceSize 参数调整初始元空间大小和最大元空间大小。
  3. 字符串常量池

    • 在 JDK 8 中,字符串常量池被移动到了堆内存中,不再存储在永久代或元空间中。
    • 这样做的目的是为了减轻永久代或元空间的负担,同时更好地支持字符串常量的垃圾回收。

综上所述,随着 JDK 版本的变化,JVM 内存分区也发生了一些调整和变化,主要体现在永久代被元空间取代,并且一些内存分区的管理参数也发生了变化。

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光不问赶路人-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值