java垃圾回收

首先看下jvm内存中主要需要回收垃圾的区域Heap

                 

回收分为轻量级的GC和重量级的GC , 又称为GC和full GC

GC: 轻量级GC主要作用区域为新生区(Edem),每次轻GC后将会清空Edem区域,未被清除的对象保存到幸存区中,也就是图中的from和to的总称;当幸存区中的对象达到默认存活次数后,该对象进去老年区。

默认存活次数是15, 可以修改配置参数修改这个值

--X:MaxTenuringThreshold=? 来修改存活次数。

四种垃圾回收算法:

1、 复制算法

主要针对于新生区,该算法适用于存活率低的区域,而新生区恰好符合这个特点。

描述: 当Edem经历依次轻GC后,幸存区需要将from区的所有幸存对象移到to区域,并且将Edem中存活的也移到to区,然后将to区名变为from,原来的from区域的东西由于都移动到to区域了,所以此时为空,此时将原from区域名改为to区域。保证:在下一次GC来临之前,to区域永远为空。

这种算法的优点是没有内存碎片,缺点是浪费内存空间,因为永远有一块区域to里面总是为空的。

2、标记清除算法

首先扫描一次内存,标记不需要被GC回收的对象(一块内存空间)

第二次扫描内存,清楚没有被标记的内存

这种算法的要经历两次扫描,所以浪费时间,而且会产生内存碎片,但是不需要额外空间。

3、 标记清除压缩算法

 

在标记清除的算法之上,增加了压缩功能。主要是在扫描一次内存,将空闲的内存和占有的内存交换,使得内存空间变的规整。压缩后的内存空间如下:

不过,我们可以结合二者以提升时间效率,当进行好几次清除算法在进行一次压缩算法

这种算法非常消耗时间,但是没有内存碎片,也不浪费额外的内存空间,适合存活率高的使用。

4、 分代回收算法

结合上面集中垃圾回收算法的优点,实行分代回收:

新生区存活率低,所以采用复制回收算法

老年代存活率高,采用标记清除压缩算法。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值