JVM原理 | 永久代和元空间区别

什么是永久代?

永久代存放JVM运行时使用的类,永久代同样包含了Java SE库的类和方法,永久代并不是Java堆内存的一部分。永久代的对象在Full GC时进行垃圾收集。

什么是元空间(MetaSpace)?

JDK1.8 以后,使用元空间替代了永久代, 用来存放大对象的;

二者最大区别:

在这里插入图片描述

  1. 元空间用的是本地内存
  2. 永久代用的是jvm内存

元空间优势:

解决了"java.lang.OutOfMemoryError: PermGen space "异常的出现

  1. 解决了空间不足的问题( 老年代中的字符串或者对象所占内存无法确定, 元空间内存取决于本地内存 ), 因为默认的类的元数据分配只受本地内存大小的限制,也就是说,本地内存剩余多少理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能任其无限壮大,JVM默认在运行时会根据需要动态的设置其大小;

为什么会空间不足?

JVM内存有限, 而且永久代一般都是存储字符串常量池, 对象等大对象, 所以比较容易满

猜你喜欢

转载自blog.csdn.net/weixin_40597409/article/details/115260077