文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JDK为什么废弃永久代,而引入元空间

2024-11-30 07:24

关注

JDK 的元空间

我们都知道,在 JVM 中,,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。

他们的作用,了不起给大家整了个图解。

图片

这就是 JVM 中不同模块对应的不同的作用。

那么什么是永久代,什么是元空间呢?

永久代:

在jdk7以及jdk7之前,方法区被称为永久代(PermGen)

此时永久代是 Java 堆(Java Heap)的一部分,用于存储类信息、方法信息、常量池信息等静态数据。

元空间(Metaspace)

元空间不再与堆连续,而是直接存在于本地内存中,也就是机器的内存。理论上机器内存有多大,元空间的野心就有多大。

而在JDK1.7之前,HotSpot 虚拟机把方法区当成永久代来进行垃圾回收。而从 JDK 1.8 开始,移除永久代,并把方法区移至元空间,它位于本地内存中,而不是虚拟机内存中。

在Java7时,仍然有永久代,永久代也与堆中的老年代连续,但永久代中存储的部分数据已经开始转移到Java Heap或Native Memory中了,比如:

HotSpots取消了永久代,那么是不是也就没有方法区了呢?

当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。

那么它和永久代有什么不同呢?这就是个问题了。

那么他们的不同点都有哪些呢?

元空间和永久代的不同点:

存储位置不同

为什么说存储位置不同呢?

永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。

存储内容不同

在原来的永久代划分中,永久代用来存放类的元数据信息、静态变量以及常量池等。现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。

图片

为什么要废弃永久代,而使用元空间来进行替换呢?

这时候我们就有了新的问题,为什么要废弃永久代,而使用元空间来进行替换呢?

首先我们得知道,在原来的永久代划分中,永久代需要存放类的元数据、静态变量和常量等。

它的大小不容易确定,因为这其中有很多影响因素,比如类的总数,常量池的大小和方法数量等。

-XX:MaxPermSize 指定太小很容易造成永久代内存溢出。

第二个原因则是移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代。

第三个原因永久代会为GC带来不必要的复杂度,并且回收效率偏低。

其实还有的人觉得,Oracle收购了jrockit虚拟机,要将它和HotSpot做整合,而jrockit是没有永久代的而且jrockit用户也没有配置永久代大小的习惯所以将废弃永久代与jrockit保持一致采用元空间实现方法区。了不起觉得也有一定的道理。

毕竟两大虚拟机要做统一永久代和元空间势必要废弃一个,而永久代的痛点是在于大小不好设置,设置小了会频繁发生GC,而且永久代的GC是效率很低且费时间,因为判断一个类是否可以被回收的条件很苛刻且费时,会占用资源影响用户线程的执行导致整体吞吐量变低。

而实际上永久代不是本地内存是虚拟机内存也就是是属于JVM进程的内存,所以如果设置过大就回造成内存的浪费,空余部分内存JVM进程本身用不到也不让其他进程使用。

如果使用元空间的话直接使用的是本地内存,默认也是不加以控制最大值的可以自己扩张,这样可以减少GC提升吞吐量,再有哪怕设置了最大值由于使用的是直接内存,空余的内存也是允许其他进程使用的。

所以,大家知道为什么要替换了吧。

既然都已经要替换,那么一定是废除永久代是对 JVM 来说,肯定是好处多多的。

废除永久代的好处

既然我们在这里说到这个Metaspace,那么肯定得说说这个 Metaspace 的相关参数都是代表的什么配置。

Metaspace

来源:Java极客技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯