zoukankan      html  css  js  c++  java
  • 垃圾回收(1)

    3个问题:

    1.如何判断对象为垃圾对象

      a.引用计数法

        在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,

        当引用失败(例如,对象置为null),引用计数器的值就-1

      b.可达性算法(推荐)

        从GCroot根节点往下搜索,能走到就不是垃圾对象,走不到就是对象

    2.如何回收

      a.回收策略

        标记-清除算法

            把判定为垃圾对象做一个标记,进行清除

            但是,有两个问题

            1.效率问题

            2.空间问题

        复制算法 

            主要解决了效率问题(新生代)

            在Eden创建对象(80%)——垃圾的回收最喜欢的地方

            Survivor(存活期)(20%)——垃圾回收后对象存活的地方

            Tenured  Gen

        标记-整理算法(老年代)

          先进行标记,把需要回收的和不需要的进行整理移动,中间分隔,把垃圾对象进行回收

        分代收集算法

          新生代——复制算法

          老年代——标记-整理算法

      b.垃圾回收器

        serial

            最基本,发展最悠久

            单线程

            桌面应用

        parnew

            复制算法

             多线程

        parallel

            复制算法

            多线程

            达到可控制的吞吐量

                吞吐量:(执行用户代码的时间)/(执行用户代码时间+垃圾回收所占用的时间)

            -xx:MaxGCPauseMillis 垃圾收集器停顿时间

            -xx:GCTimeRatio  吞吐量大小

        cms

          (不能与parllel一起使用)

          老年代

          标记-清除算法

          并发:两件事同时做

          并行:一件事几个人同时做

          初始标记

          并发标记

          重新标记

          并发清理

          优点:并发收集、低停顿

                          缺点:占用大量的cpu资源,无法处理浮动垃圾、出现Concurrent mode  Failure 、空间碎片

        G1

          优势:

            并行与并发

            分代收集(分区域)

            空间整合

            可预测的停顿

          步骤:

            初始标记

            并发标记

            最终标记

            筛选回收

    3.何时回收

  • 相关阅读:
    linux-cp
    linux-rmdir
    linux-tail
    linux-head
    linux 重定向
    hadoop环境安装及错误总结
    vim 图册
    为什么可以这么快! awk 与python的应用
    八大排序算法的 Python 实现
    linux的文件隐藏属性 chattr lsattr
  • 原文地址:https://www.cnblogs.com/mm163/p/10847776.html
Copyright © 2011-2022 走看看