美文网首页
jdk 1.8 方法区变动

jdk 1.8 方法区变动

作者: 南土酱 | 来源:发表于2019-04-11 20:19 被阅读0次

本文从个人理解方面出发,如有不同意见,敬请提出,多多指教。

jdk 1.7 之前 实现方法区的方式是永久代(PermGen)。永久代和堆相互隔离。

jdk 1.7时: 存储在永久代的部分数据就已经转移到 Java Heap(堆) 或者 Native memory(本地内存)。但是 1.7的版本并没有完全移除永久代。

例如: 符号引用(Symbols)转到 Native memory;
字符串常量(interned Strings) 转到 Java Heap 

静态变量(class statics variables )转移到了Java heap

jdk 1.8 虽然还保留了方法区的概念,但是实现方式不同。用元空间 (MetaSpace,使用的是本地内存 ,并不在虚拟机上)永久的代替代了永久代。和堆也是不相连。

为什么移除永久代?

(1)字符串存在永久代中,容易出现性能问题和内存溢出
(2)永久代大小不容易确定. PermSize指定了大小容易造成OOM(内存用完)
(3)给 GC(垃圾回收机制) 带来不必要的复杂度,且回收效率低

拓展: 

GC是什么?https://blog.csdn.net/wy965874100/article/details/78592094

OOM是什么?
https://www.cnblogs.com/ThinkVenus/p/6805495.html

感谢以上网友的知识分享。谢谢

相关文章

  • jdk 1.8 方法区变动

    本文从个人理解方面出发,如有不同意见,敬请提出,多多指教。 jdk 1.7 之前 实现方法区的方式是永久代(Per...

  • 2-JVM内存结构

    内存结构 方法区 JDK1.7 之前包含1.7 将方法区称为 Perm Space 永久代JDK1.8之后包含1....

  • JVM_JMM: MetaSpace 元空间的详解

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

  • JVM学习——元空间(Metaspace)

    一、从方法区(PermGen)到元空间(Metaspace) 方法区(PermGen) JDK1.8以前的HotS...

  • 类模型与Class实例的位置

    1、类模型的位置 加载的类在JVM中创建相应的类结构,类结构会存储在方法区(JDK1.8之前:永久代;JDK1.8...

  • 方法区/元空间

    在jdk1.8之前叫方法区,1.8之后修改成方法区,不同点在于,方法区属于堆空间一部分,是有默认大小的,元空间利用...

  • ThingsBoard二次开发之源码分析1- 基础知识

    预备知识 JDK1.8 注解 Protobuf Guava JDK1.8 Lambda表达式 方法引用方法引用的唯...

  • 元空间

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

  • JVM模型

    JDK1.7及之前的JVM模型 JDK1.8及之后的JVM模型 堆与方法区是线程共享的虚拟机栈、本地方法栈、程序计...

  • 3、JVM中有哪些内存区域,分别都是用来干嘛的?

    JVM有哪些内存区域 【1】存放类的方法区 这个方法区是在JDK1.8以前的版本里,代表JVM中的一块区域。主要是...

网友评论

      本文标题:jdk 1.8 方法区变动

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