zoukankan      html  css  js  c++  java
  • GC(垃圾回收器)中的算法

    • GC的两种判定方法

             (1) 引用计数法

                  给对象添加一个引用计数器,每当引用一次+1,每次失效时-1,当计数器为0时,表示对象就是不可能再被使用的。

             (2) 可达性分析算法

                  将“GC Roots”对象作为根节点,开始向下搜索,所走过的路径成为引用链。当一个对象到GC Roots没有任何引用链时,说明此对象是不可用的。

    • 能作为GC Roots的对象

             (1) 虚拟机栈中引用的对象

             (2) 方法区中静态属性引用的对象

             (3) 方法区中常量引用的对象

             (4) 本地方法栈中JNI引用的对象

    • GC的收集方法

             (1) 标记清除算法

                  过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象

                           * 清除阶段:清除所有未被标记的对象

                  缺点: * 效率问题,标记和清除两个过程的效率都不高

                            * 空间问题,会产生大量不连续的内存碎片

             (2) 复制算法

                  过程: * 将原有的内存空间分成两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中存活对对象复制到未使用的内存块中,然后清除正在使用的内存块中所有对象

                  缺点: * 浪费一半的内存

                            * 如果对象的存活率很高,复制要花很长时间

             (3) 标记整理算法

                   过程: * 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的视为垃圾对象

                            * 整理阶段:将所有的存活对象压缩到内存的一端(或向另一端移动),之后清理边界所有的空间

                   缺点: * 效率也不高,不仅要标记存活对象,还要整理它们的引用地址

  • 相关阅读:
    Sokect简单入门(1)TCP协议一
    Tomcat内存溢出 解决方法
    服务器配置 ssl 证书,Nginx配置
    优秀的博客文章记录
    SpringBoot实现优雅的关机
    关于 redis 的 数据类型 和 内存模型
    微信, qq 支付宝 等相关开发 资源 记录
    设计模式 之 单列设计模式
    Swagger
    MQ服务器奔溃解决过程
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6571143.html
Copyright © 2011-2022 走看看