码迷,mamicode.com
首页 > 编程语言 > 详细

Java 四种引用

时间:2015-07-24 20:58:56      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:java   引用   软引用   弱引用   

截止现今版本,Java的引用分为四种:强引用、软引用、弱引用和虚引用(又称幽灵引用),在JDK1.2中引入了这四种引用,使得开发中可以在一定程度上虚范围的控制Java对象的生命周期。之所以说虚范围,是因为即使使用了非强引用,最终的垃圾回收发起也都是由JVM垃圾回收机制决定的,但是这种改变是一种进步,使我们在应用中更加灵活。
强引用:
一般在Java开发中使用的都是强引用,之所以称之为强引用,如果未显示将引用置空或者超出作用域,即不会对此类引用关联的对象进行回收,即使JVM内存紧张,宁可抛出OutOfMemory异常,也不会回收此类引用关联的对象。
示例:

Object obj = new Object();
Object strong = obj;
obj = null;

此种即为强引用,当不显示的进行引用清空或者超出作用域时,引用一直持有对象的句柄,GC也无法回收此类引用。
软引用(SoftReference):
软引用是用来描述一些有用但是不必需的对象。对于软引用关联的对象,当JVM内存不足时,会回收此类应用关联的对象。此类引用完美的解决了缓存的引用,当内存足够时,效果当道,当内存不足时,生存当道,会释放软引用关联的对象,以满足JVM对内存的需求。
示例:

Object obj = new Object();
SoftReference<Object> sr = new SoftReference<Object>(obj);
obj = null;

即使obj=null被设置,软引用sr关联的对象也不会被回收,直到JVM内存紧张时,才会对软引用所持有的对象进行回收。软引用的这种特性被广泛的应用在应用缓存中,无论是后端数据还是前端页面缓存。
弱引用(WeakReference):

Object obj = new Object();
WeakReference<Object> wr = new WeakReference<Object>(obj);
obj = null;

当obj=null设置以后,之后的GC会被建议性的回收弱引用关联的对象,但是并不一定是在设置obj=null之后的那一次GC。
虚引用(PhantomReference):(引用其他文章的一句话)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。
 虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃 圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是 否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
为什么介绍Java中的引用呢,以为除了第四种虚引用,强引用、软引用和弱引用都是开发中经常是会使用的,但是对于软引用和弱引用的使用要注意,因为其被JVM特殊处理的特性,使用时要防止错误的使用导致还有用处的对象被GC回收。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 四种引用

标签:java   引用   软引用   弱引用   

原文地址:http://blog.csdn.net/securitit/article/details/47044989

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!