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.何时回收

  • 相关阅读:
    java代码水仙花
    java代码求奖金。要求从键盘输入利润
    java中输入3个数,从大到小的输出。。。。
    java代码从键盘输入n的值,计算1+1/2+1/3+...+1/n的值,,
    java求1+1/2+1/3+1/4+......+1/n的值
    求分数1+1/2+1/3+.....+1/n的值
    论程序员成长:如何像游戏一样打怪?新手值得重视!
    网曝某大厂员工下班健身后去领公司夜宵,被罚终身禁止领夜宵并冻结涨薪降考评!
    每个程序员都该学习的5种编程开发语言!最后一门大部分人没听过~
    C语言编程初学者基础知识学习:文件的读写操作!
  • 原文地址:https://www.cnblogs.com/mm163/p/10847776.html
Copyright © 2011-2022 走看看