JVM 元空间、java中的元空间

本文介绍了Java JVM中元空间的相关知识。元空间用于存放类信息等数据。JDK 1.6使用永久代存储,方法区是规范,永久代是实现;JDK 1.7将字符串常量池等移到堆区;JDK 1.8正式移除永久代,采用元空间代替,其使用本地内存。还通过示例展示不同JDK版本运行结果差异。

JVM 元空间

元空间

原空间(Meta Space)

​ 用于存放类信息、常量、静态变量、JIT即时编译器百年以后的机器代码等数据等。例如:java.lang.Object类的元信息、Integer.MAX_VALUE等常量。

JDK1.6

HotSpot JVM 使用Method Area方法区存储,也叫永久代(Permanent Generation)

  1. 方法区和“永久代(Permanent Generation)”的区别:方法区是JVM的规范,而永久代(Permanent Generation)是JVM规范的一种实现,并且只有HotSpot JVM才有永久代“Permanent Generation”,而对于其他类型的虚拟机。如JRockit(Oracle)、J9(IBM)并没有。
  2. 方法区是一片连续的堆空间,当JVM加载的类的信息容量超过了最大可分配空间,虚拟机会抛出OutOfMemoryError : PermGenspace 的Error 。
  3. 永久代的GC是和老年代( old generation )捆绑在一起的,无论谁满了,都会触发永久代和老年代的垃圾收集。
  4. 可以通过-XX:PermSize=N设置方法区(永久代)初始空间,-XX:MaxPermSize=N设置方法区(永久代)最大空间,超过这个值将会抛出错误:java.lang.outOfMemoryError: PermGen

JDK1.7

将字符串常量池、静态变量转移到了堆区。

JDK1.8:正式移除永久代,采用Meta Space元空间代替

​ 元空间的本质和永久代类似,都是对JVM规范中方法区的一种具体实现。不过元空间与永久代之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值