害!为啥写这篇文章呢?今天阿里实习Java技术面电话面试问到了Java回收机制,自己明明视频了解过,可当时却没想起来,狼狈至极,写个文章加深一下印象!
Java的内存回收和C++有所不同,C++没有自动回收机制,申请的空间需要自己手动释放,而Java不同,有着垃圾回收机制,程序员在编写程序时,如果不想用某个对象,只需赋值为null,Java内存回收机制就会把无用对象申请的空间释放。
Java垃圾回收机制依赖垃圾回收算法寻找无用对象,无论哪种垃圾回收算法,都有两个步骤:
- 找到无用对象
- 回收无用对象占用的空间
以我浅薄的知识,暂时了解的两种垃圾回收算法:
- 引用计数法
- 根搜索算法(引用可达法)
接下来详细的聊一聊算法具体内容:
1、 引用计数法:
堆中的每个对象都有一个引用计数,每被引用一次,计数加一,引用其的变量值设为null,引用值减一,当引用计数为零时,对象就变为无用对象。
优点:简单
缺点:循环引用的无用对象无法被识别
2、根搜索算法
引用关系被程序看做一张图,从GC ROOT开始向下搜索,形成一条引用链,一系列的GC ROOT形成一系列的引用链,如果一个对象到这些引用链不可达,则被认为无用对象。
能被看做GC ROOT的对象有:
(1)虚拟机栈中引用的对象
(2)方法区中类静态属性引用的对象
(3)方法区中常量引用的对象
(4)Java本地接口中引用的对象
感慨!唉~ 学无止境哟,我这才刚开始…
来源:CSDN
作者:blankliu404
链接:https://blog.csdn.net/L333333333/article/details/104616985