美文网首页
JDK1.8去除永久代引入元空间的原因您知道吗

JDK1.8去除永久代引入元空间的原因您知道吗

作者: 测试开发Kevin | 来源:发表于2023-03-30 11:14 被阅读0次

之前写了一篇文章

JVM中的堆和栈到底存储了什么

重点介绍了Java虚拟机运行时数据区中堆、栈以及方法区存储数据的相关知识很受大家欢迎,今天来介绍一下jdk 1.8开始引入的元空间,元空间的引入也是与Java虚拟机运行时存储数据有关。

元空间

JDK8之后就没有永久代(Permanent Generation,简称PermGen),取而代之的是元空间(meta space)。元空间放置于本地的内存中。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。所以元空间的最大可利用内存空间就是系统的内存空间,这就不会再出现像永久代的内存溢出错误了。我们可以为通过参数–XX:MetaspaceSize 为元空间设置一个可用空间最大值。下图对PermGen和meta space进行了对比


JVM 1.7到1.8的变化

其实JVM 1.7到1.8的变化,主要是方法区的变化,方法区在JDK1.7的时候叫做永久代,JDK1.8之后废弃了永久代改为元空间。方法区用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等,回收目标主要是常量池的回收和类型的卸载,各线程共享,具体如下图所示:

JDK1.8去除永久代引入元空间的原因

主要基于以下两点原因:

1、由于Permanent Generation内存经常不够用或发生内存泄露,引发恼人的java.lang.OutOfMemoryError: PermGen (在Java Web开发中非常常见)。

2、移除Permanent Generation可以促进HotSpot JVM与JRockit VM的融合,因为JRockit没有永久代。

相关文章

  • 元空间

    解释 元空间是jdk1.8之后出现的,之前叫永久代 元空间就是方法区,方法区是JVM的规范,元空间是HotSpot...

  • JVM_JMM: MetaSpace 元空间的详解

    Meta Space是JDK1.8引入的,在JDK1.8使用的是方法区,永久代(Permnament Genera...

  • java8内存结构变化

    java8移除了永久代,增加了元空间。1)java7以前的版本Hotspot的方法区位于永久代,并且永久代和堆是互...

  • 常用基础参数元空间MetaspaceSize讲解

    -XX:MetaspaceSize 设置元空间大小元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元...

  • JVM

    1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。...

  • Java对象回收

    对象分配流程:1、class 加载,数据存放在元空间(已经移除的 JVM 内存之外,原因是大小不好调优,永久代触发...

  • Java8新特性之虚拟机的改变

    撤销了永久带,引入了元空间: 在HotSpot虚拟机中,jkd1.6时,设计团队把方法区设计为永久带,这样GC工作...

  • JVM永久代和元空间的区别

    绝大部分 Java 程序员应该都见过 "java.lang.OutOfMemoryError: PermGen s...

  • JVM 1.8 永久代---元空间 的变动

    介绍JVM的内存模型的博客:https://blog.csdn.net/q5706503/article/deta...

  • 永久代和元空间的迁移变化

    1.方法区介绍 方法区与JAVA堆一样,是各个线程共享的内存区域。它用于存储已被虚拟机加载的类型信息、常量、静态变...

网友评论

      本文标题:JDK1.8去除永久代引入元空间的原因您知道吗

      本文链接:https://www.haomeiwen.com/subject/dkoqddtx.html