博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activator.createinstance 需要垃圾回收么_在垃圾回收器中有哪几种判断是否需要被回收的方法...
阅读量:6409 次
发布时间:2019-06-23

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

098624b0ad4f13d51d31dd78b795f671.png

垃圾回收器在回收垃圾之前第一件事就是判断哪些是可以被回收的对象,如何判断呢?我们可以根据该对象是否还有引用指向它来进行判断,如果有则不能回收,如果没有则可以回收,具体有以下几种算法:

1. 引用计数算法:

给对象添加一个引用计数器,每当它被引用一次计数器就加一,当该引用失效时就减一,如果计数器的值为0就表示它要被垃圾收集器作为垃圾收集了。这种算法存在一个问题,就是如果对象之间互相循环引用,他们就不可能被垃圾回收。

举个栗子:

public class RefrenceCounting {         public Object instance = null;  } public class TestGc {    public static void main(String[] args) {        RefrenceCounting rf1 = new RefrenceCounting();        RefrenceCounting rf2 = new RefrenceCounting();        rf1.instance = rf2;        rf2.instance = rf1;        rf1 = null;        rf2 = null;        System.gc();    }}

c5893231d54a9e3368f1fae7b932d2e1.png

从图中可以看到,rf1和rf2互相引用,即使rf1和rf2置空,从外界无法访问他们,但是他们的引用计数器不为空,垃圾收集器无法回收他们。

2.可达性分析算法:

通过一系列称为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到Gc roots没有任何引用链相连时则此对象是不可用的

abaf57b8b5b1cbf5ac3957e7ad90eee3.png

上图中obj1,obj2,obj3都有引用指向Gc Roots,obj4和obj5没有指向Gc Roots的引用,所以他们会作为垃圾回收器的对象。可达性分析算法是java中使用的算法。

可以作为Gc Roots的对象包括以下几种:

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

2) 方法区中类静态属性引用的对象

3) 方法区中常量引用的对象

4) 本地方法栈中引用的对象

引用计数算法和可达性分析算法都和引用有关,在jdk1.2以后引用被分为四种:

1). 强引用

强引用就是例如 ObjectA a = new ObjectA(),这样的引用,存在这种引用的对象不会被垃圾回收器回收。

2):软引用:

软引用是指一些引用还有用但并非必须,被软引用的对象会在内存被占满,即将发生内存溢出异常之前进行回收。

3):弱引用:被弱引用的对象只能生存到下一次垃圾回收发生之前,当下一次垃圾回收时,无论内存是否被占满都会回收弱引用的对象。

4):虚引用,被虚引用的对象和没有被引用的对象一样都会被垃圾回收器回收,不同的是,它在被回收时会收到一个系统通知。

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

你可能感兴趣的文章
BroadcastReceiver的学习和使用实例
查看>>
在线浏览PDF文件的实用jquery插件推荐
查看>>
dd命令使用详解
查看>>
centos7 设置开机启动服务
查看>>
【Java基础】序列化与反序列化深入分析
查看>>
浏览器跨域问题(jsonp)——jsonp详解
查看>>
Spring 注解总结
查看>>
4K加速普及,8K近在咫尺,下一个是?
查看>>
Application security
查看>>
主键生成策略
查看>>
django admin中保存添加的数据提示need string or buffer, int found
查看>>
Autofac.Integration.Mvc分析
查看>>
[Spring框架]Spring开发实例: XML+注解.
查看>>
java.lang.NoClassDefFoundError: javax/transaction/Synchronization
查看>>
黑客与画家——读后感
查看>>
实参时丢弃了类型 discards qualifiers discards qualifiers问题
查看>>
bzoj-2115 Xor
查看>>
gridcontrol复选框功能实现(超具体)
查看>>
Java面试题集(二)
查看>>
C#使用UUID生成ID
查看>>