垃圾回收算法

Java垃圾回收思想

枚举根节点,做可达性分析。

根节点

可以做根节点的有:类加载器、Thread、虚拟机栈的本地变量表、static成员、常量引用、本地方法栈的变量等。

垃圾回收算法

标记清除

算法分为标记、清除两个阶段。首先标记处所有需要回收的对象,在标记完成后统一回收所有。

缺点:效率不高,标记和清除两个过程的效率都不高。产生碎片,碎片过多会导致提前GC。

复制算法

它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

优缺点:实现简单,运行高效,但是空间利用率低。

标记整理

标记过程仍然与"标记-清除"算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉端边界以外的内存。

优缺点:没有了内存碎片,但是整理内存比较耗时。

分带垃圾回收

JVM采用分带垃圾回收,即Young区用复制算法,Old区用标记清除或者标记整理算法。因为对象分配是在Young区进行分配的,大部分对象的生命周期都很短。但是Old区存放的对象生命周期都比较长,需要被回收的垃圾比较少,不适合使用复制算法。

对象分配

JVM对象分配优先分配在Eden区分配,大对象直接进入老年代,可以由-XX:PretenureSizeThreshold参数来设置。

长期存活的对象直接进入到老年代,可以由-XX:MaxTenuringThreshold、-XX:+PrintTenuringDistribution、-XX:TargetSurvivorRatio等参数来设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值