我是靠谱客的博主 懦弱金鱼,最近开发中收集的这篇文章主要介绍方法区、永久代、元空间的关系什么是方法区、永久代、元空间为什么以元空间取代永久代,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是方法区、永久代、元空间

众所周知,方法区是运行时数据区很重要的一部分,是用来存储类的信息、常量池、方法数据、及时编译器编译的代码等。

永久代是jdk1.7之前对方法区的一个落地实现,存在于堆中,用于存储类的信息和字符串常量池,同样包含SE库的类和方法。在jdk1.7时将字符串常量池从永久代移动到堆中,永久代在jdk8被移除。

元空间和永久代类似,都是对方法区的一个落地实现,他里面存储的数据比永久代纯粹很多,就是类的元数据。元空间的位置不存在于虚拟机中,而是在本地内存中。

为什么以元空间取代永久代

永久代的缺点

  1. 占用了堆的空间
  2. 永久代空间太大占用过多堆内存,太小存储类信息有限
  3. 永久代的 GC 会触发堆的 GC

为什么之前可以这么设计?

当时还是32位机,并看的不是很清楚,到现在64位机,弊端就暴露出来。

元空间解决了永久代的问题,jdk1.8起开始取代永久代存放类信息

元空间存在的问题

元空间是按照类加载器分配空间的,也就是说类加载器加载了一个类,元空间分配给这个类的空间其实是分配给的类加载器,不同的类加载器占用不同的空间,它们之间不共享类信息,如果程序中有大量的类加载器,而它们加载的类非常少,那么有可能会造成大量的空间浪费。

空间分隔开也久可能会造成内存空间碎片化。

最后

以上就是懦弱金鱼为你收集整理的方法区、永久代、元空间的关系什么是方法区、永久代、元空间为什么以元空间取代永久代的全部内容,希望文章能够帮你解决方法区、永久代、元空间的关系什么是方法区、永久代、元空间为什么以元空间取代永久代所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部