当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-28 10:05:43 437观看
导读今天我们来说说这个 JVM 的相关知识,因为面试简直是问到麻木的问题,那就是关于 JVM 的相关知识,今天了不起再次来和大家聊一下这个知识,我们从一些比较奇怪的问题说起,也不说那些经常会问到的内容了,比如 JVM 的垃圾回收机

今天我们来说说这个 JVM 的相关知识,因为面试简直是问到麻木的问题,那就是关于 JVM 的相关知识,今天了不起再次来和大家聊一下这个知识,我们从一些比较奇怪的问题说起,也不说那些经常会问到的内容了,比如 JVM 的垃圾回收机制什么的。Hcl28资讯网——每日最新资讯28at.com

JDK 的元空间

我们都知道,在 JVM 中,,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。Hcl28资讯网——每日最新资讯28at.com

他们的作用,了不起给大家整了个图解。Hcl28资讯网——每日最新资讯28at.com

图片图片Hcl28资讯网——每日最新资讯28at.com

这就是 JVM 中不同模块对应的不同的作用。Hcl28资讯网——每日最新资讯28at.com

那么什么是永久代,什么是元空间呢?Hcl28资讯网——每日最新资讯28at.com

永久代:

在jdk7以及jdk7之前,方法区被称为永久代(PermGen)Hcl28资讯网——每日最新资讯28at.com

此时永久代是 Java 堆(Java Heap)的一部分,用于存储类信息、方法信息、常量池信息等静态数据。Hcl28资讯网——每日最新资讯28at.com

元空间(Metaspace)

元空间不再与堆连续,而是直接存在于本地内存中,也就是机器的内存。理论上机器内存有多大,元空间的野心就有多大。Hcl28资讯网——每日最新资讯28at.com

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

在Java7时,仍然有永久代,永久代也与堆中的老年代连续,但永久代中存储的部分数据已经开始转移到Java Heap或Native Memory中了,比如:Hcl28资讯网——每日最新资讯28at.com

  • 符号引用(Symbols)转移到了Native Memory
  • 字符串常量池(interned strings)转移到了Java Heap
  • 类的静态变量(class statics)转移到了Java Heap

HotSpots取消了永久代,那么是不是也就没有方法区了呢?Hcl28资讯网——每日最新资讯28at.com

当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。Hcl28资讯网——每日最新资讯28at.com

那么它和永久代有什么不同呢?这就是个问题了。Hcl28资讯网——每日最新资讯28at.com

那么他们的不同点都有哪些呢?Hcl28资讯网——每日最新资讯28at.com

元空间和永久代的不同点:Hcl28资讯网——每日最新资讯28at.com

存储位置不同

为什么说存储位置不同呢?Hcl28资讯网——每日最新资讯28at.com

永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。Hcl28资讯网——每日最新资讯28at.com

存储内容不同

在原来的永久代划分中,永久代用来存放类的元数据信息、静态变量以及常量池等。现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。Hcl28资讯网——每日最新资讯28at.com

图片图片Hcl28资讯网——每日最新资讯28at.com

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

这时候我们就有了新的问题,为什么要废弃永久代,而使用元空间来进行替换呢?Hcl28资讯网——每日最新资讯28at.com

首先我们得知道,在原来的永久代划分中,永久代需要存放类的元数据、静态变量和常量等。Hcl28资讯网——每日最新资讯28at.com

它的大小不容易确定,因为这其中有很多影响因素,比如类的总数,常量池的大小和方法数量等。Hcl28资讯网——每日最新资讯28at.com

-XX:MaxPermSize 指定太小很容易造成永久代内存溢出。Hcl28资讯网——每日最新资讯28at.com

第二个原因则是移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代。Hcl28资讯网——每日最新资讯28at.com

第三个原因永久代会为GC带来不必要的复杂度,并且回收效率偏低。Hcl28资讯网——每日最新资讯28at.com

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

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

而实际上永久代不是本地内存是虚拟机内存也就是是属于JVM进程的内存,所以如果设置过大就回造成内存的浪费,空余部分内存JVM进程本身用不到也不让其他进程使用。Hcl28资讯网——每日最新资讯28at.com

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

所以,大家知道为什么要替换了吧。Hcl28资讯网——每日最新资讯28at.com

既然都已经要替换,那么一定是废除永久代是对 JVM 来说,肯定是好处多多的。Hcl28资讯网——每日最新资讯28at.com

废除永久代的好处

  • 由于类的元数据分配在本地内存中,元空间的最大可分配空间就是系统可用内存空间。不会遇到永久代存在时的内存溢出错误。
  • 将运行时常量池从PermGen分离出来,与类的元数据分开,提升类元数据的独立性。
  • 将元数据从PermGen剥离出来到Metaspace,可以提升对元数据的管理同时提升GC效率。

既然我们在这里说到这个Metaspace,那么肯定得说说这个 Metaspace 的相关参数都是代表的什么配置。Hcl28资讯网——每日最新资讯28at.com

Metaspace

  • -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
  • -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。如果没有使用该参数来设置类的元数据的大小,其最大可利用空间是整个系统内存的可用空间。JVM也可以增加本地内存空间来满足类元数据信息的存储。但是如果没有设置最大值,则可能存在bug导致Metaspace的空间在不停的扩展,会导致机器的内存不足;进而可能出现swap内存被耗尽;最终导致进程直接被系统直接kill掉。 如果设置了该参数,当Metaspace剩余空间不足,会抛出:java.lang.OutOfMemoryError: Metaspace space
  • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
  • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

本文链接:http://www.28at.com/showinfo-26-11818-0.htmlJDK为什么废弃永久代,而引入元空间

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Postman脚本批量转接口自动化用例

下一篇: DevOps优秀实践之用户与权限

标签:
  • 热门焦点
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top