Java回收机制与回收算法

孤人 提交于 2020-03-02 22:31:54

害!为啥写这篇文章呢?今天阿里实习Java技术面电话面试问到了Java回收机制,自己明明视频了解过,可当时却没想起来,狼狈至极,写个文章加深一下印象!

Java的内存回收和C++有所不同,C++没有自动回收机制,申请的空间需要自己手动释放,而Java不同,有着垃圾回收机制,程序员在编写程序时,如果不想用某个对象,只需赋值为null,Java内存回收机制就会把无用对象申请的空间释放。

Java垃圾回收机制依赖垃圾回收算法寻找无用对象,无论哪种垃圾回收算法,都有两个步骤:

  1. 找到无用对象
  2. 回收无用对象占用的空间

以我浅薄的知识,暂时了解的两种垃圾回收算法:

  1. 引用计数法
  2. 根搜索算法(引用可达法)

接下来详细的聊一聊算法具体内容:

1、 引用计数法:

  堆中的每个对象都有一个引用计数,每被引用一次,计数加一,引用其的变量值设为null,引用值减一,当引用计数为零时,对象就变为无用对象。

  优点:简单
  缺点:循环引用的无用对象无法被识别

2、根搜索算法

  引用关系被程序看做一张图,从GC ROOT开始向下搜索,形成一条引用链,一系列的GC ROOT形成一系列的引用链,如果一个对象到这些引用链不可达,则被认为无用对象。

  能被看做GC ROOT的对象有:
    (1)虚拟机栈中引用的对象
    (2)方法区中类静态属性引用的对象
    (3)方法区中常量引用的对象
    (4)Java本地接口中引用的对象

感慨!唉~ 学无止境哟,我这才刚开始…

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!