博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「每天一道面试题」如何确定JVM堆中哪些对象是可以被回收的
阅读量:6247 次
发布时间:2019-06-22

本文共 457 字,大约阅读时间需要 1 分钟。

「每天一道面试题」如何确定JVM堆中哪些对象是可以被回收的

积累

垃圾回收器在对堆进行回收之前,需要确定堆中哪些对象是可以继续存活的,哪些是可以被回收的,Java采用可达性分析算法来判定对象是否可以继续存活。

这个算法的过程是通过一系列的称为“GC Roots”的对象作为起点,从这些起始点开始向下搜索,搜索过程中所有走过的路径称为引用链,当一个对象和引用链没任何连接的时候,则表明这个对象是可以被回收的。

可作为“GC Roots”对象的有如下几种:

  1. Java虚拟机栈(栈帧中的本地变量表)中引用的对象;

  2. 本地方法栈中JNI(即一般说的Native方法)引用的对象;

  3. 方法区中类静态属性引用的对象;

  4. 方法区中常量引用的对象。

还有一个用于标识哪些对象可以被回收的算法,不过这个算法并没有被Java语言采用,即引用计数法。这个算法的过程是:给每个对象添加一个引用计数器,每当这个对象被引用一次,计数器加一;每当这个对象引用失效的时候,计数器减一;引用计数器为零的对象表示是可以被回收的对象。虽然这个算法很简单,但是它无法解决对象之间互相循环引用的问题,所以Java没有采用。

转载地址:http://gflia.baihongyu.com/

你可能感兴趣的文章
页面自动刷新代码大全
查看>>
【java基础】压缩图片上传
查看>>
Kotlin代码检查在美团的探索与实践
查看>>
Tomcat下的修改缺省项目文件夹
查看>>
网络技术
查看>>
it公司了解
查看>>
SpringCloud调研系列1:服务注册
查看>>
使用四种框架分别实现百万websocket常连接的服务器{转}
查看>>
python 之 随机数获取
查看>>
Linux开机启动流程
查看>>
Docker 介绍: 相关技术
查看>>
xcode中Version和Build的区别
查看>>
RedHat下利用bonding实现linux服务器网卡绑定
查看>>
libjingle : sessionmanagertask 分析
查看>>
主从DB与cache一致性
查看>>
Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
CTeX-2.4.6-Full
查看>>
python编码
查看>>
增加squid的filedescriptors
查看>>
Xmanger远程登录Linux服务器
查看>>