专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

对象是否可回收的方法有哪些_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/7 1:23:07       共计:3565 浏览

对象是否可回收的方法有哪些?

gc是JAVA语言魅力之所在,也是面试过程中常常提及的点,下面分析下jvm怎么回收垃圾!

1,被动回收:首先需要明确的是,jvm有一套自动回收垃圾的机制,jvm中的线程在扫描的时候如果发现有不可达对象,就进行标记,表示这个对象占用的内存可以回收(这个时候还没回收)。

这里的重点是什么是不可达对象?jvm会选择一个不会被回收的变量(static final),或者本地方法栈中的对象,或者静态(static)的对象作为GC ROOTS(根节点),其他所有创建的对象引用都会挂在这个根节点上,变成一颗类似树的结构。

在回收垃圾的时候,从根节点开始遍历,如果发现有对象引用遍历不到,也就是没挂在根节点上,比如A引用B,B引用C,但是A挂在树上的引用被剪断,那么ABC对象就属于不可达对象,也就是需要回收的对象!

回收线程再次扫描的时候发现之前被搭上标记的对象,并调用类中默认继承的finalize方法,该方法会检测是否有引用继续指向待回收对象,如有引用,则这些对象重新使用不在回收,如果确定回收的对象,会放入一个专门回收的队列中,由专门的线程进行清空内存!

2,主动回收:调用system.gc方法进行对象回收,但是正如上面所说,调用了之后,只是打上可回收标记,真正的释放内存还需要jvm自己来进行!

JAVA是个无底洞,如果您有问题,欢迎来交流,更多的技术分享,敬请关注。。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:我是歌手的评委都有谁_PHP基础 | ·下一条:map扩容为什么是2倍_PHP基础

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有