美文网首页
垃圾回收的基本知识

垃圾回收的基本知识

作者: huangxiongbiao | 来源:发表于2018-03-15 13:40 被阅读11次

    一、什么样的对象需要回收

    1、引用计数回收方式

    oc中的回收机制,采用引用计数的方式,引用为0的时候回收对象。此方法易造成循环引用内存泄露

    2、可达性回收方式

    引用链没有被GC Root对象引用的对象,被当成无用对象进行回收。
    GC Root:虚拟机栈,本地方法栈,方法区引用的对象

    二、回收的算法

    1、标记-清除

    扫描内存,发现可回收的对象进行标记,然后清除。
    确定易造成内存碎片

    2、标记-整理

    将需要回收的对象清除后,内存统一向左移动解决内存碎片的问题。
    但是每次整理消耗性能严重

    3、复制

    将内存按1:1分为两部分,一块使用一块空闲,每次清除时将有用的对象复制到空闲区。统一清除使用区的数数据后,将空闲区转换成使用区

    4、分代收集法

    将内存分为:新生代,老年代,永生代
    新生代分为8:1:1三块,将有用的对象复制到小的两块上,大的清除。小的都满了只后移动到老年代区域。
    新生代一般采用复制清除,老年代采用标记-整理

    三、发生内存清理的时间

    新生代,老年代,永久代,某一个内存溢出。
    申请内存失败会发生gc
    主动调用gc
    程序空闲时间

    安全点:程序执行跳转,方法调用,循环分支语句的时候,可以Stop-The_World GC
    安全区域:程序没有执行的时候,线程处于sleep状态或者blocked状态的时候,这时线程无法响应jvm的中断请求

    四、常用的垃圾收集器

    1、新生代收集器:

    Serial:单线程串行收集器,复制算法,清理时会Stop-The-World
    PraNew:Serial的多线程版。算法模式类似上
    Parallel Scanvenge :高吞吐量

    2、老年代收集器:

    Serial Old:单线程串行收集器,作为CMS的后备方案
    CMS:并行收集器,收集过程(只能和Serial、PraNew配合使用)
    1.初始标记
    2.并发标记
    3.重新标记
    4.并发清除

    Parallel Old:老年代多线程标记整理算法

    G1:

    相关文章

      网友评论

          本文标题:垃圾回收的基本知识

          本文链接:https://www.haomeiwen.com/subject/jcpcqftx.html