• jvm-标记阶段的GC算法


    一: 引用计数法

      

    定义:  每个对象保存一个整形的引用计数器属性,用于记录对象的引用情况.
    
    实现:  对于对象A,只要有任一对象引用了A,计数器就加一,当引用失效,计数器就减一,只要对象A的引用计数器为0,即表示对象A为垃圾对象,既可以回收了.
    
    优点: 实现简单,垃圾对象容易辨识,判定效率高,回收没有延迟性
    
    缺点: 1,需要单独的字段存储计数器,增加了内存开销
            2,每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销
            3,无法处理循环引用:这是最严重的缺陷,直接导致了Java的垃圾收集器中没有使用这种算法

    二: 可达性分析算法(根搜索算法,追踪性垃圾收集)

      hostspot虚拟机使用该算法

      是以GCRoots为起始点,内存中存活的对象都会被根对象集合(GCRoots)直接或间接的连接着,称为引用链.

      如果对象没有任何引用链相连,这是不可达的,意味着该对象已死亡,可以标记为垃圾对象.

      再可达性分析算法中,只有被根对象集合的引用链链接的对象,才是存活对象.

      GCRoot组成:

      

    jvm中对象的三种状态:

    1,可触及的: 从根节点可以到达该对象

    2, 可复活的: 对象的所有引用都被释放,但是该对象有可能再finalize()方法中复活

        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            instance = this;
        }

    3,不可触及的: 对象没有任何被引用,finalize()被调用,并且没有被复活,就会进入不可触及状态.不可触及状态的对象不可能被复活,因为finalize()方法只被调用一次

  • 相关阅读:
    django-templates 模板变量
    实用代码
    游戏渠道后台上线
    游戏投放中的-LTV概念与价值
    转字符串格式format技巧
    mysql -数据库设计三范式
    OAuth2.0基本原理及应用
    回调函数
    GitHub 博客园快捷发布工具
    前端react antd加载错误解决
  • 原文地址:https://www.cnblogs.com/alenblue/p/12922984.html
Copyright © 2020-2023  润新知