关于JVM的垃圾堆积(三)[Java编程]
本文“关于JVM的垃圾堆积(三)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
对象可触及时的生命周期
在 JVM 1.2 之前,堆中的对象分为三种状况,辨别是:
1.可触及的 -- 从根节点开始可追踪到
2.可复生的 -- 从根节点开始追踪不到,但有大概被终结办法触及并复生.不但仅是那些声明了 finalize() 办法的对象,而是全部的对象都要经过可复生状况
3.不可触及的 -- 以上两种大概性都不存在,可以真正回收它们所占据的内存了
版本 1.2 中,可触及按强弱进一步细分为:
1.强可触及 -- 即本来的可触及,从根节点开始的任何直接引用,如一个部分变量或任何从强可触及对象的实例引用的对象
2.软可触及 -- 表现为 SoftReference 所引用的对象
3.弱可触及 -- 表现为 WeakReference 所引用的对象
4.影子可触及 -- 表现为 PhantomReference 所引用的对象
SoftReference、WeakReference、PhantomReference 都是 java.lang.ref.Reference 类的子类.强引用与这三种弱引用之间最基本的差别是,强引用禁止引用目标被垃圾汇集,而那三种引用不由止.
要成立某一对象的软引用、弱引用或是影子引用,只需简单的包装一下.比方,成立一个 cow 对象的软用就写成:
SoftReference softCow = new SoftReference(cow); //关于 WeakReference 和 PhantomReference 都是一样的
这里 softCow 是一个强引用,从 softCow 到 cow 是一个软引用,也就预示着垃圾汇集器从根节点开始只能通过一个软引用才能触及到这个 cow 对象.要堵截到 cow 的软引用,使之不再软可触及,可调用 softCow.clear(),要获得 cow 对象用 softCow.get().
可触及性状况的改变
引入三个这样的引用关于虚拟机是有效处的,垃圾汇集器对强引用对象是不能肆意妄为,但是它可随便更改百强可触及对象的可触性状况.在软引用、弱引用大概影子引用指向对象的可触及状况被垃圾汇集器改变时,你可以得到这改变发生的告诉,办法是要把引用对象和引用行列关联起来.
引用行列是 java.lang.ref.ReferenceQueue 类的实例,垃圾汇集器在改变可触及性状况时会把所触及的引用对象编入到行列中.你只要设置并察看引用行列,便可异步得到告诉了.
以上是“关于JVM的垃圾堆积(三)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |