模拟面试回答第十七问:垃圾判定算法

垃圾判定算法简介

关于垃圾判定算法,主要有两种:引用计数法和可达性分析法。

引用计数法

引用计数法就是每个内存对象维护一个引用计数器。当有引用指向这块内存时,计数器+1,引用失效时-1,但这个算法有个致命缺陷------循环引用。

比如:创建A和B对象,A的next和B的next互相指向,当方法结束后,A和B对象引用消失后,A和B的内存的计数器都是1,也就是说判定为垃圾,因为A和B的next互相引用,这是堆中的对象,不出现在栈中,栈中只有A和B的对象引用,没有next,所以销毁的是A和B的对象引用,而堆中的next依然存在,指向互相的内存,所以这两块内存随着对象引用的消失而无法访问,又由于next指针而一直存活不被GC。

可达性分析法

可达性分析法就是维护从GCRoots出发的引用链。有一组叫做GCRoots的根对象,从它们出发能到达的对象就是存活对象,现代的JVM都采用这种方法。

GCRoots

接着我介绍一下GCRoots,什么样的对象可以被叫做GCRoots,首先局部变量,静态变量这些都是GCRoots,其次本地方法栈的JNI引用,就是C++语言写的,以及同步锁持有的对象和JVM内部的对象。

相关推荐
2301_814809865 分钟前
如何通过SSH隧道连接远程数据库_本地端口转发与phpMyAdmin
jvm·数据库·python
2301_814809869 分钟前
C++如何验证YAML语法格式是否正确_try-catch解析校验用法【实战】.txt
jvm·数据库·python
人道领域10 分钟前
【LeetCode刷题日记】225.用队列实现栈--三招实现栈操作(多种思维)
java·开发语言·算法·leetcode·面试
zhangchaoxies10 分钟前
mysql如何开启慢查询日志_mysql性能监控环境配置
jvm·数据库·python
tjc1990100511 分钟前
Python数据分析如何识别异常值_IQR四分位距检测法实战
jvm·数据库·python
2401_8716965212 分钟前
CSS如何通过JS修改CSS变量_使用setProperty动态更新样式
jvm·数据库·python
吕源林14 分钟前
php怎么调用OPPO AI图像超分_php如何将低分辨率图放大不失真
jvm·数据库·python
2401_8836002514 分钟前
mysql读写分离下如何保证事务一致性_利用强一致性读配置
jvm·数据库·python
m0_5887584816 分钟前
CSS项目开发如何提速_应用BEM规范建立可复用的样式库
jvm·数据库·python
qq_6543669817 分钟前
PHP函数是否支持调用FPGA设备_PHP与FPGA硬件交互的实现方式【教程】
jvm·数据库·python