Java8之后的元空间和方法区以及之前的永久代这三者到底存在哪些区别?

直接入正题吧!
相信了解过JVM的人都听说过,在JVM中的一个非堆内存在java8之前叫做永久代,在java8后,就更名为元空间了,当然这两个概念都是基于HotSpot虚拟机,其他虚拟机没有这些概念
为了理清这些变化,先说一下方法区和永久代的区别
方法区只是一规范,在不同的虚拟机中的实现是不一样的,例如永久代和元空间。
用于存放被已经被JVM加载的的类信息,常量,静态变量,方法数据,构造函数和普通方法等

java堆物理上有新生代和老年代,逻辑上分为新生代+老年代+永久代
解析:
永久代其实只是方法区的一个存储实现,逻辑上划分为堆的一部分,为的是方法区也可以用堆内存的GC垃圾回收机制,而不用重新针对方法区做GC操作,直接使用堆内存的GC就可以了

在java8后,使用元空间替代了永久代,且元空间的内存不在JVM堆中,而是在本地内存中,所以java8元空间,基本不存在OOM内存溢出;

但是java7的永久代位于JVM内存中,存在OOM错误;
且在java8中,常量池是位于元空间中,string的实例化放在堆内存中

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值