JVM面试向——垃圾回收

3 篇文章 0 订阅
2 篇文章 0 订阅

对象回收的判断算法

1、引用计数算法

给对象添加一个引用计数器,每一个地方引用它,计数器值就加1,对象引用失效的时候,计数器就减1。当计数器值为0的时候,此对象为垃圾。

优点: 判定效率高

缺点: 对象间循环依赖,此算法无法正确判断是否为垃圾对象(致命),主流虚拟机没有这种算法。

33、JVM探究_Page28_Image1

2、可达性分析算法

GC Roots的对象作为起始点,从这些结点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain)当一个对象到GC Root没有任何引用链相连时,则证明此对象是不可达的。

可以作为GC Roots的对象

  • 栈帧中本地变量表中引用的对象
  • 方法区类静态属性引用的对象
  • 方法区中常量引用的对象
  • 方法栈JNI引用的对象

方法区回收

方法区回收内容为废弃常量无用类

无用类包含:

  • 该类所有实例都被回收
  • 加载该类的ClassLoader被回收
  • 该类对应的class对象没有引用,无法在任何地方反射访问该类方法

垃圾收集器算法

1、标记清除算法(最基础算法)

  1. 首先标记出所有需要回收的对象。
  2. 在标记完成后统一回收掉所有被标记的对象

缺点:1、标记和清除过程的效率都不高。2、产生大量的不连续内存碎片

2、复制算法

  1. 内存按容量划分成大小相等的两块
  2. 一块内存用完了,将存活着的对象复制到另外一块
  3. 将都是垃圾对象的那块清空内存

缺点:1、在对象存活率较高时,复制操作次数多,效率降低。2、内存缩小了一般;需要额外空间做分配担保。

3、标记整理算法

  1. 标记步骤和清除算法相同
  2. 标记完后垃圾对象移动到一段,然后再清理掉

4、分代收集算法

  • 复制算法 新生代
  • 标记-清理或者标记-整理 老年代

垃圾收集器

  • Serial(最基本的收集器)
    • 单线程
    • 垃圾收集的时候 ,暂停所有线程
    • 优点简单高效,缺点停顿时间长
    • 年轻代-复制算法,老年代-标记整理算法
  • ParNew收集器 Serial的多线程版本
  • Parallel Scavenge收集器
    • 新生代收集器
    • 复制算法
    • 吞吐量较高
    • 多线程
  • Serial Old收集器 Serial的老年代版本
  • Parallel Old收集器 Parallel的老年代版本
  • CMS收集器
    • 回收停顿时间短
    • 多线程
    • 标记-清除
    • 1.初始标记 STW
    • 2.并发标记
    • 3.重新标记 STW
    • 4.并发删除
  • G1收集器
    • 并发执行
    • 分代收集
    • 空间整合
    • 可预测停顿
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值