zoukankan      html  css  js  c++  java
  • Java垃圾回收机制

    首先判断对象活动对象还是垃圾对象:

    1.引用计数器算法

    为每个对象添加一个引用计数器,每当有一处引用,计数器加一,每当一处引用失效,计数器减一

    缺点:当两个对象相互引用,那么两个对象都无法回收

    2.根搜索算法

    从根对象开始,任何可以被触及的对象是活动对象,否则为垃圾对象

    垃圾回收算法:

    1.标记清除算法

    使用根搜索算法标记要回收的对象,最后统一回收。

    • 效率不高
    • 会产生不连续的空间碎片

    2.复制回收算法

    将可用内存一分为二,当其中一份内存用满后,将当期存活的对象复制到另一份内存,并清除当期内存

    • 内存使用效率低

    3.标记整理算法:

    使用根搜索算法标记回收对象,将活动对象移动到内存一端,然后清除垃圾对象

    4.分代回收算法:

    分三代:新生代,老年代,持久代

    • 新生代分三份,每份都使用复制回收算法,当最后一份也满了,复制到老年代
    • 老年代使用标记整理算法
    • 持久代用来存储常量,静态

    垃圾回收触发条件:

    新生代写满,触发ScavengeGC,较频繁

    老年代,持久代写满,显示调用System.GC();触发FullGC,不频繁

    垃圾收集器:

    Serial收集器:收集垃圾时,暂停其他线程,Client新生代默认收集器

    ParNew收集器:Serial多线程版,Server新生代默认收集器

    Parallel Scavenge收集器:多线程,复制算法,新生代收集器

    Serial Old收集器:老年代收集器,单线程,标记整理算法

    Parallel Old收集器:老年代收集器,多线程,标记整理算法

    CMS收集器:老年代收集器,标记清除算法

    • 初始标记
    • 并发标记
    • 重新标记
    • 并发清除

    G1收集器:老年代收集器,标记整理算法

  • 相关阅读:
    c# 中的线程和同步
    Javascript 观察者模式
    连接SQLite 创建ADO.net实体类
    给软件增加注册功能 c#
    log4net 使用步骤
    C# 操作 Excel
    PCL编译历程
    设计模式
    kinect
    eclipse配置servlet错误
  • 原文地址:https://www.cnblogs.com/imeiling/p/6420022.html
Copyright © 2011-2022 走看看