JVM -- 垃圾收集算法/三色标记/读写屏障

本文介绍了JVM中垃圾收集的几种算法,包括引用计数法、可达性分析以及常见的内存分配策略。重点讨论了并发标记的三色标记算法及其可能导致的多标、少标、漏标问题,以及解决这些问题的读写屏障技术。同时,探讨了内存分配中的分代年龄、大对象处理和老年代空间分配担保机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾判断算法

判断jvm中对象,哪些是可回收对象(垃圾对象),哪些是存活对象

引用计数法

在这里插入图片描述

  • 在对象中添加一个计数属性用于标记对象被引用的次数,每多一个引用,计数+1,当引用失效时,计数-1,如果计数=0,表示整个对象没有被引用了,可以被回收(可对比sync可重入锁/LockSport理解)
可达性分析算法
  • 通过GC Root根对象作为起始点,从这些节点开始,根据引用关系链向下搜索
  • 如果某个对象无法被搜索到,就表明该对象没有被引用了,可以被回收
  • 反之则对象存活,不能回收
    在这里插入图片描述
哪些对象可以作为GC Root:
  • 所有Java线程当前活跃的栈帧里指向GC堆里的对象的引用;即: 当前所有正在被调用的方法的引用类型的参数/局部变量/临时值。
  • VM的一些静态数据结构里指向GC堆里的对象的引用,例如HotSpot VM里的Universe里有很多这样的引用。
  • JNI handles,包括global handles和local handles
  • (看情况)所有当前被加载的Java类
  • (看情况)Java类的引用类型静态变量
  • (看情况)Java类的运行时常量池里的引用类型常量(String或Class类型)
  • (看情况)String常量池(StringTable)里的引用

内存分配算法

指针碰撞
retry:
  HeapWord* compare_to = *Universe::heap()->top_addr();
  HeapWord* 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值