GC:垃圾回收机制,不用手动回收释放

举报
孙中明 发表于 2022/04/03 16:41:46 2022/04/03
【摘要】 GC:垃圾回收机制,不用手动回收释放什么是垃圾?对象被判定为垃圾的标准没有被其他对象引用怎么判断垃圾?判定对象是否为垃圾的算法引用计数算法通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1任何引用计数为0的对象实例可以被当作垃圾收集优点:执行效率高,程序执行受影响较小缺点︰无法检测出循环引用的情况,导致内存泄露package com....

GC:垃圾回收机制,不用手动回收释放

什么是垃圾?对象被判定为垃圾的标准
没有被其他对象引用

怎么判断垃圾?判定对象是否为垃圾的算法

  • 引用计数算法
    通过判断对象的引用数量来决定对象是否可以被回收
    每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1
    任何引用计数为0的对象实例可以被当作垃圾收集

优点:执行效率高,程序执行受影响较小
缺点︰无法检测出循环引用的情况,导致内存泄露

package com.interview.javabasic.jvm.gc;

public class MyObject {
    public MyObject childNode;
}




//////////////////////////////////////////

package com.interview.javabasic.jvm.gc;

public class ReferenceCounterProblem {
    public static void main(String[] args) {
        MyObject object1 = new MyObject();
        MyObject object2 = new MyObject();

        object1.childNode = object2;
        object2.childNode = object1;

    }

}



可达性分析算法

通过判断对象的引用链是否可达来决定对象是否可以被回收

可以作为GC Root的对象

虚拟机栈中引用的对象(栈帧中的本地变量表)
方法区中的常量引用的对象
方法区中的类静态属性引用的对象
本地方法栈中JNI ( Native方法)的引用对象》活跃线程的引用对象

标记-清除算法(Mark and Sweep)

标记∶从根集合进行扫描,对存活的对象进行标记
清除∶对堆内存从头到尾进行线性遍历,回收不可达的对象内存

image.png

缺点:空间碎片

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。