垃圾回收的算法

垃圾收集算法

  • 1)引用计数法

    给对象添加引用计数器,当引用对象时计数器+1,引用失效时,计数器-1,当计数器等于0时,对象失效,内存可以被回收。
    优点:实现简单高效。
    缺点:对象之间的互相循环引用问题不好解决。

  • 2)可达性算法(根搜索法)

    通过GC roots可达的对象路径称为引用链(reference chain),当一个对象没有引用链时(即从GCroots不可达)则视为不可用对象,内存可以被回收。java使用该算法进行垃圾收集。可解决循环引用的问题

    哪些对象可以视为GC roots ?
    a. 虚拟机栈中(即栈帧中的本地变量)的引用对象;
    b. 本地方法栈中的引用对象;
    c. 方法区(永久代)中的静态变量引用的对象和常量池中引用的对象

清除算法
1.标记清除算法
在这里插入图片描述

在这里插入图片描述

2.复制算法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
3.标记压缩算法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.分类收集算法
在这里插入图片描述
5.增量收集算法
在这里插入图片描述
6.分区算法
在这里插入图片描述

  • 1)标记-清除算法(mark-sweep)

    分两步进行,第一步标记出可以回收的对象,第二步统一清理可以回收的对象内存。 缺点:首先标记和清除步骤效率都不高,其次会产生内存碎片。

  • 2)复制算法

    将内存分为(大小相等)两部分,每次只使用其中一块进行内存分配,当内存使用完后,就出发GC,将存活的对象直接复制到另一块空闲的内存中,然后对当前使用的内存块一次性清除所有,然后转到另一块内存进行使用。
    优点:简单,高效。 缺点:浪费内存,因为每次都有另一块内存空闲着。

  • 3)标记-整理算法

    类似于标记-清除算法,但是第二步进行内存回收时,将存活的对象向内存一端移动,达到消除内存碎片问题。

  • 4)分代收集算法

    java sun
    hotspot虚拟机将内存分为新生代(堆)、老年代(堆)、永久代(方法区、常量池、即时编译代码)几个区域,新生代主要使用基于复制算法的垃圾回收,老年代和永久代主要使用标记-整理算法进行垃圾回收。具体每个区域使用哪种垃圾回收算法还要视收集器的实现制约。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值