Java垃圾回收算法(GC)

本文详细介绍了Java的垃圾回收算法,包括引用计数法、标记清除法、复制算法、标记压缩法、分代算法和分区算法。特别讨论了堆空间的分区策略,如年轻代、老年代、Eden、Survivor区(from/to)以及它们之间的转换。文章还提到了垃圾回收器的选择,如新生代和老年代分别对应的回收器,以及为解决多线程分配问题的TLAB和优化老年代扫描的卡表技术。
摘要由CSDN通过智能技术生成

一、垃圾回收算法

1、引用计数法(文中已经介绍,主要的缺点是无法处理循环引用;在每次引用的产生和消除的时候,会伴随着一个加法或者减法的操作,对性能有一定的影响)

2、标记清除法(从根节点出发开始所有可达的对象,未被标记的就是垃圾对象。主要缺点是产生空间碎片)

3、复制算法(将原空间分为两块,每次使用其中一块,在垃圾回收时,进行复制,然后转换使用的内存空间。主要的缺点是将系统的内存折半。主要适用于存活对象少,垃圾对象多的情况下)

4、标记压缩法(从根出发对所有可达对象进行一次标记,然后进行压缩。最后进行清理)

5、分代算法(每一种垃圾回收算法都有其优缺点。分代算法是根据对象的特点分成几块,新建的对象放入新生代区域,当一个对象经历了几次复制后还存活则放入老年代。老年代因为对象存活率高复制算法不适用,因此采取标记清除或者标记压缩)

6、分区算法(把堆空间划分为连续的不同小区间。降低了GC产生的影响)


二、堆空间分区(以下是摘自精品留言总结)

1:二八法则-适用于许多的领域,对象在JVM对内存空间的生命周期也同样符合

2:为了更好的JVM性能以及充分利用对象生命周期的二八法则,JVM的作者将JVM的对内存空间进行了分代的处理

3:堆内存空间=年轻代+老年代

年轻代=Eden+from+to
年轻代用于分配新生的对象
Eden-通常用于存储新创建的对象,对内存空间是共享的,所以,直接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值