• HotSpot 垃圾回收算法简介


    HotSpot垃圾回收机制

        分代回收
     
    垃圾回收算法
        复制
            将A空间中的可达对象复制到另一块空白空间B中,然后回收A的整个空间。(必须有一块空白空间,空间利用率不是很高,但是回收快)。
        标记清除
            遍历A空间,标记其中的可达对象,然后在遍历A空间,清除其中的不可达对象。(空间利用率高,但是会产生碎片,而且需要两次遍历空间A)。
        标记清除压缩
            遍历A空间,标记可达对象,遍历A空间,将可达对象移动到A空间的开始位置,并回收不可达空间的内存。(是复制算法和标记清除法的综合体,不会产生内存碎片)。
     
    垃圾收集器(1,2,3需要Stop-the-world,4的某些阶段可以和应用程序并发执行)
        1、串行收集器(单CPU执行)
            新生代:使用串行的复制算法。
            老生代:使用串行的标记清除压缩算法。
     
       2、 并行收集器
            新生代:使用复制算法的并行版本。
            老生代:不并行,使用串行版本的标记清除压缩算法。
     
       3、 并行压缩收集器
            新生代:使用复制算法的并行版本。
            老生代:使用Mark-Summary-Compact算法。(内存空间被划分为若干固定大小的region)
                Mark:先串行的mark那些在代码中能够直接被引用的对象,将这些对象分配给各个线程,然后,各个线程并行mark所有的可达对象,并更新对象所在区域的信息(Object size and location)。
                Summary:操作对象为region,不是object,首先根据region中可达对象的密度,查找dense prefix(就是一个redion),然后针对dense prefix后面的所有region,The summary phase calculates and stores the new location of the first byte of live data for each compacted region。目前串行实现。可并行,但是并行的优先级比mark和compact低。
                Compact:利用Summary中的统计信息,将可达对象向前拷贝。(并行执行)。
     
        4、并发标记清除收集器(收集器可以和应用程序并发执行)
            新生代:使用复制算法的并行版本。
            老生代:使用并发的标记清除(Concurrent Mark-Sweep  CMS)算法。
                Initial Mark:应用程序短暂挂起,串行标记那些可以在应用程序代码中被直接引用的对象。
                Concurrent Mark:通过Initial Mark中标记的对象,专门使用一个或多个线程(官方文档上默认为一个),通过Initial Mark的结果,标记所有可达的对象,线程执行的时候,应用程序不必挂起,可以和应用程序并发的执行。
                Remark:由于在Concurrent Mark阶段,应用程序在执行,可能有新的垃圾产生,此时,应用程序短暂挂起,GC启动多个线程,对那些在Concurrent Mark阶段被改变的对象,快速并行的进行重标记。
                Concurrent Sweep:并行回收垃圾对象所占用的空间,此阶段,应用程序可以和GC并发的执行,在此阶段产生的垃圾会在下次回收。
  • 相关阅读:
    Python购物车的实现课程
    第一天作业二 三级菜单的实现
    windows快捷键命令汇总整理
    python课程第一天作业1-模拟登录
    Java中的代理
    Java中的继承
    Java中的访问权限细谈
    Java中的参数列表
    Java中的this关键字老生常谈
    数据结构与算法Java描述 队列
  • 原文地址:https://www.cnblogs.com/lcycn/p/8624595.html
Copyright © 2020-2023  润新知