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

  • 相关阅读:
    基于微服务架构的RBAC权限管理系统
    用C#实现基于(OpenId Connect)的单点登录与RBAC权限验证(SSO,OIDC,RBAC)
    量化分析基础
    Ocelot 发现服务总是失败的解决办法
    windows 下安装 theano 及配置 gpu
    python scrapy 爬虫 初学
    layer弹出层框架alert与msg详解
    Workerman-文件监控-牛刀小试
    ECharts 初体验
    实验楼 linux 学习
  • 原文地址:https://www.cnblogs.com/mm163/p/10847776.html
Copyright © 2011-2022 走看看