• JVM垃圾回收机制


    1、GC发生在JVM哪部分?

      GC是发生在堆内

    2、GC是什么?有几种GC?

      GC是分代收集算法,在堆内不同的区域有不同的策略

      有两种GC:Minor GC、Full GC

    • 次数上频繁收集Young区 Minor GC
    • 次数上较少收集Old区 Full GC
    • 基本不动perm区(永久区)

      

    3、它们的算法是什么?

      GC4大算法:

    • 引用计数法:只要有对象被引用,GC就不进行回收,这种方式已被淘汰(JVM的实现一般不采用这种方式,缺点:1)每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗;2)较难处理循环引用【A引用B,B引用A】)
    • 复制算法(copying):年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(copying):1)从根集合(GC Root)开始,通过Tracing从From中找到存活对象,拷贝到To中;2)From、To交换身份,下次内存分配从To开始;

    • 标记算法(Mark-Sweep):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
      • 标记(mark):从根集合开始扫描,对存活的对象进行标记。
      • 清除(Sweep):扫描整个内存空间,回收未被标记的对象,使用free-list记录可以区域

      • 优点:不需要额外的空间,在同一块内存空间操作
      • 缺点:两次扫描,耗时严重;会产生内存碎片

    • 标记压缩(Mark-Compact):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
      • 标记(Mark):与标记清除一样。
      • 压缩(Compact):再次扫描并往一端滑动存活对象(在整理压缩阶段,不在对标记的对象做回收,而是通过所有存活对象都向一端移动,然后直接清除边界以外的内存)
      • 优点:没有内存碎片
      • 缺点:需要移动对象的成本

    老年代Full GC有两种算法结合使用:标记-清除-压缩(Mark-Sweep-Compact)

    原理:

    1. Mark-Sweep和Mark-Compact结合
    2. 和Mark-Sweep一致,当进行多次GC后才Compact

    Full GC两种算法结合使用,先标记进行清除,清除多次并产生很多内存碎片之后,再做压缩

    优点:减少移动对象成本

  • 相关阅读:
    0x00 mysql 的安装,简单mysql命令的使用
    nuxt中定制iview主题颜色
    获取浏览器语言的解决方案
    nuxt页面切换效果
    MySQL(非sql sever)安全体系的学习心得
    My SQL日志 学习心得
    楼梯在SQL Server事务日志管理,三级:事务日志,备份和恢复(16周翻译)
    SQL Server事务日志管理的阶段,1级:事务日志概述
    楼梯在SQL Server事务日志管理,一级:事务日志的概述(15周翻译)
    数据库的独立子查询以及数据的删除、更新和建立视图的笔记
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/12639937.html
Copyright © 2020-2023  润新知