美文网首页
[jvm]方法区,永久代和元空间

[jvm]方法区,永久代和元空间

作者: 程序员小鬼 | 来源:发表于2020-03-15 17:56 被阅读0次

1.方法区

说到方法区肯定需要了解《Java虚拟机规范》中对内存管理的划分。如图所示


image.png

这是《规范》中对内存的具体划分,说白了这只是个规范,是理论的东西。具体的实现因人而异。因此不同的jvm实现方法区的方式不同,甚至不同版本的实现也不同。目前除了openjdk和甲骨文的hotspotvm,商业上说得出名字的jdk只有IBM的j9vm和Azul的zingvm了。hotspotvm 的JDK 1.7、JDK 1.8实现就不同

2.永久代和元空间

永久代和元空间就是hotspot的不同版本的实现方式,分别属于JDK 1.7之前和之后。
PermGen(永久代)

永久代是hotspot 的jdk1.8以前的实现,使用jdk1.7的老司机肯定以前经常遇到过“java.lang.OutOfMemoryError: PremGen space”异常。这里的“PermGen space”其实指的就是方法区。不过方法区和“PermGen space”又有着本质的区别。前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有“PermGen space”。

元空间

其实,移除永久代的工作从JDK 1.7就开始了。JDK 1.7中,存储在永久代的部分数据就已经转移到Java Heap或者Native Heap。但永久代仍存在于JDK 1.7中,并没有完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了Java heap;类的静态变量(class statics)转移到了Java heap。

JDK1.8对JVM架构的改造将类元数据放到本地内存中,另外,将常量池和静态变量放到Java堆里。HotSpot VM将会为类的元数据明确分配和释放本地内存。在这种架构下,类元信息就突破了原来-XX:MaxPermSize的限制,现在可以使用更多的本地内存。

对于僵死的类及类加载器的垃圾回收将在元数据使用达到“MaxMetaspaceSize”参数的设定值时进行。
适时地监控和调整元空间对于减小垃圾回收频率和减少延时是很有必要的。持续的元空间垃圾回收说明,可能存在类、类加载器导致的内存泄漏或是大小设置不合适

3.使用元空间的优点

1.不会出现“java.lang.OutOfMemoryError: PremGen space”异常
2.字符串常量池迁移到堆中,避免溢出
3,永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4.通过类加载器来控制垃圾回收。

相关文章

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

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

  • JVM

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

  • 元空间

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

  • [jvm]方法区,永久代和元空间

    1.方法区 说到方法区肯定需要了解《Java虚拟机规范》中对内存管理的划分。如图所示 这是《规范》中对内存的具体划...

  • 【JVM】答疑

    方法区和永久代什么区别?方法区是 JVM 的规范,而永久代则是 JVM 规范的一种实现。只有 HotSpot 才有...

  • 关于java8的一些常考点--持续更新

    1.HashMap底层使用数组+链表+红黑树(1.8新增)实现2.JVM内存管理方面,由元空间代替永久代作为方法区...

  • JVM快速入门

    请谈谈你对JVM的理解,JVAVA8虚拟机的更新。 以元空间的方式去实现了 方法区,而jdk 1.8之前是以永久代...

  • JVM-线程,内存 ,finalize

    目前jvm的后台线程有如下: JVM内存区域 永久代/方法区 被 JVM 加载的类信息、 常量、 静态变量、 即时...

  • JVM 分代垃圾回收

    JVM把堆分成了新生代、老年代 、持久代(方法区或元空间),其中新生代又分为了Eden(伊甸园)、Survivor...

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

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

网友评论

      本文标题:[jvm]方法区,永久代和元空间

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