JVM原理--元空间(MetaSpace)与永久代(PermGen)的区别

本文详细介绍了JVM中元空间(MetaSpace)与永久代(PermGen)的区别和联系。元空间使用本地内存,不受JVM垃圾回收控制,而永久代使用JVM内存并逐步被移除。JDK8开始,元空间取代永久代,解决了永久代可能导致的OOM问题,其大小由系统内存决定。元空间的内容包括类的元数据,而永久代包含了字面量、静态变量和符号引用等。由于元空间使用本地内存,理论上不会引发OOM异常。
摘要由CSDN通过智能技术生成

原文网址:JVM原理--元空间(MetaSpace)与永久代(PermGen)的区别_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍JVM中元空间(MetaSpace)与永久代(PermGen)的区别。

永久代和元空间与方法区的关系

JVM一共分为五个部分:堆,方法区,虚拟机栈,本地方法栈,程序计数器。

永久代和元空间都属于方法区,都是方法区的实现。

JDK8的的变化

从JDK7 开始,JDK开发者们就开始消灭永久代了,JDK8完全完成:

  1. 永久代的字面量 (interned strings)     转移到 Java heap;    (JDK7完成)
  2. 永久代的静态变量(class statics)        转移到Java heap ;   (JDK7完成)
  3. 永久代的符号引用(Symbols)              转移到 Native heap ;(JDK7完成)
  4. 永久代中的 class metadata                    转移到 Meta Space; (JDK8完成)
    1. 永久代参数 (PermSize MaxPermSize) 改为 元空间参数(MetaspaceSize MaxMetaspaceSize)

元空间与永久代的区别

元空间

使用本地内存(native mermory)。

它不属于JVM内存,不受JVM垃圾回收的控制。最大大小取决于系统内存,而不是堆大小。

永久代

使用JVM的内存。

为什么要使用元空间?

原因1:避免OOM异常

使用永久代时

使用永久代时,通常使用 -XX:PermSize 和 -XX:MaxPermSize设置永久代的初始大小和设置永久代的最大值,但是不是总能知道应该设置为多大合适(太小,容易导致永久代溢出;太大,容易导致老年代溢出),如果使用默认值很容易遇到OOM(OutOfMemory)错误。

使用元空间时

JDK8 的方法区是元空间,元空间可以加载多少类的元数据由系统的实际可用空间来控制。

元空间使用本地内存(Native memory)。元空间使用本地内存也就意味着只要本地内存足够,就不会出现OOM的错误。默认情况下元空间大小是无限的。

原因2:将虚拟机进行合并

Oracle想合并HotSpot和JRockit的代码。

元空间里是什么数据?

上边是文章的部分内容,为便于维护,全文已转移到此网址:JVM原理-元空间(MetaSpace)与永久代(PermGen)的区别 - 自学精灵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值