JVM堆内存的分代管理和GC的垃圾回收机制?

堆内存:

存放对象的实例,垃圾收集器管理的主要区域,分为新生代,老年代

新生代又分为Eden区域, Survivor区域

Survivor区域又分为form,to区域

新生代Eden:新对象和没有达到一定年龄的对象保存在该区域

老年代Tenured:新创建的超大对象,长时间被使用的对象,经过GC清理后还存活的对象

元空间:像一些方法中操作的参数,临时的对象都保存在元空间

1.创建一个新对象,会把这个新对象的实例放在新生代的Eden区域,当Eden区空间不足,无法保存创建新的对象时则会触发MinerGC进行清理

2.当经过一次MinorGC进行清理后Eden区还存活的一些对象会通过复制算法把它复制到Survivor区(存活区)的from 区(原to区).

3.Survivor区的两块区域是相同大小的两块区域,是可以互相交换的,交换以后form的叫to,to的叫from,交换的过程中会把其中一个的对象复制到另外一个,保证有一个是空的.

 --经历一次MinorGC,如果Eden区有对象被保存到Survivor区的原to区时,然后对原from区域中进行一次清理,把清理后还依然存活的对象复制到原to区,然后把原to区更名为from区,把原form区更名为to区,这样就保证每次to区都是空的

4.当原from区进行MinorGC进行清理后往原to区进行复制的时候,原to区复制一部分对象后满了的情况下,会将原form区的剩余对象复制到老年代区域.

--另外Survivor区中的对象每熬过一次MinorGC年龄就会增长一次,还可以通过设置年龄阈值参数:-XX:MaxTenuringThreshold,当年龄增到到我们设定的阈值时,将该对象直接复制到老年代中.

5.老年代区域没有可用空间时会触发Full GC,Full GC会扫描整个老年代区域将还存活的对象进行标记,然后把不存活的对象进行清除.

优点:空间内存活对象多的情况下,效率高.

缺点:直接回收不存活对象所占用的内存空间,回收后造成整个空间不连贯,产生内存碎片.

堆内存空间满的情况会抛出OutOfMemoryError异常.

GC的垃圾回收策略:

串行策略,并行策略,并发策略

GC的垃圾回收算法:

复制,标记-清除,标记-清除-整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值