【JVM】如何判断对象是否可以被回收

引用计数法:

在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。

优点:实现简单,判定效率高;缺点:无法解决对象相互循环引用的问题,对象A中引用了对象B,对象B中引用对象A。

可达性分析:

通过一系列称为"GC Roots"的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为"引用链"(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。

相关推荐
黄雪超1 小时前
JVM——从JIT到AOT:JVM编译器的云原生演进之路
java·开发语言·jvm
小韩学长yyds14 小时前
JVM 基础 - JVM 内存结构
jvm
oioihoii15 小时前
C++23 已移除特性解析
java·jvm·c++23
怡人蝶梦17 小时前
Java大厂后端技术栈故障排查实战:Spring Boot、Redis、Kafka、JVM典型问题与解决方案
java·jvm·redis·elk·kafka·springboot·prometheus
qx0917 小时前
sqlite3的封装
jvm·数据库·sqlite
煎饼皮皮侠19 小时前
利用aqs构建一个自己的非公平独占锁
java·jvm·aqs
黄雪超1 天前
JVM——JVM运行时数据区的内部机制是怎样的?
java·开发语言·jvm
好名字更能让你们记住我1 天前
Linux多线程(六)之线程控制4【线程ID及进程地址空间布局】
linux·运维·服务器·开发语言·jvm·c++·centos
怡人蝶梦1 天前
Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积
java·jvm·redis·kafka·springboot·prometheus
居居飒2 天前
深入理解 JDK、JRE 和 JVM 的区别
java·开发语言·jvm