垃圾回收器怎么判断哪些是可以被回收的对象-创新互联

垃圾回收器怎么判断哪些是可以被回收的对象?针对这个问题,今天小编总结这篇有关垃圾回收器算法应用的文章,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。

成都创新互联公司主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务甘井子,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
  1. 引用计数算法:
    给对象添加一个引用计数器,每当它被引用一次计数器就加一,当该引用失效时就减一,如果计数器的值为0就表示它要被垃圾收集器作为垃圾收集了。这种算法存在一个问题,就是如果对象之间互相循环引用,他们就不可能被垃圾回收。
    举个栗子:
    public class RefrenceCounting {
    public Object instance = null;
    }
    public class TestGc {
    public static void main(String[] args) {
    RefrenceCounting rf1 = new RefrenceCounting();
    RefrenceCounting rf2 = new RefrenceCounting();
    rf1.instance = rf2;
    rf2.instance = rf1;
    rf1 = null;
    rf2 = null;
    System.gc();
    }
    }

从图中可以看到,rf1和rf2互相引用,即使rf1和rf2置空,从外界无法访问他们,但是他们的引用计数器不为空,垃圾收集器无法回收他们。

  1. 可达性分析算法:
    通过一系列称为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到Gc roots没有任何引用链相连时则此对象是不可用的。

上图中obj1,obj2,obj3都有引用指向Gc Roots,obj4和obj5没有指向Gc Roots的引用,所以他们会作为垃圾回收器的对象。可达性分析算法是java中使用的算法。
可以作为Gc Roots的对象包括以下几种:
1)  虚拟机栈(栈帧中的本地变量表)中引用的对象
2)  方法区中类静态属性引用的对象
3)  方法区中常量引用的对象
4)  本地方法栈中引用的对象

引用计数算法和可达性分析算法都和引用有关,在jdk1.2以后引用被分为四种:

  1. 强引用:
    强引用就是例如  ObjectA a = new ObjectA(),这样的引用,存在这种引用的对象不会被垃圾回收器回收。
    2:软引用:
    软引用是指一些引用还有用但并非必须,被软引用的对象会在内存被占满,即将发生内存溢出异常之前进行回收。
    3:弱引用:被弱引用的对象只能生存到下一次垃圾回收发生之前,当下一次垃圾回收时,无论内存是否被占满都会回收弱引用的对象。
    4:虚引用,被虚引用的对象和没有被引用的对象一样都会被垃圾回收器回收,不同的是,它在被回收时会收到一个系统通知。
  2. 关于jvm
  3. 垃圾回收器的使用
  4. 就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

当前文章:垃圾回收器怎么判断哪些是可以被回收的对象-创新互联
分享地址:https://www.cdcxhl.com/article4/codeoe.html

成都网站建设公司_创新互联,为您提供品牌网站设计网站收录网页设计公司网站制作网站内链小程序开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都做网站