Java对象的硬、软、弱和虚引用

java对对象的引用有如下4中方式:
硬引用(StrongReference)

程序创建一个对象,并把对象覆盖一个引用变量,通过这个引用变量操作实际的对象。当一个对象被一个或多个引用变量引用时,它就处于可达状态,这个时候系统的垃圾回收机制就不会回收它。

软引用(SoftReference)

通过类SoftReference实现,当系统内存足够的时候,它不会被回收;但是当系统内存不足的时候,回收机制就会将其回收。Android中常用它来优化图片的异步加载。(现在一般使用LruCache,因为android 2.3+(API Level9)之后,SoftReference在内存够用的时候也有可能被提前释放掉)

弱引用(WeakReference)

通过WeakReference类实现,比软引用级别低。不过系统内存是否足够,只要回收机制运行,就会被回收

虚引用(PhantomReference)

对 对象本身没有影响,虚引用要个引用队列一起使用才有意义。当对象被回收时,与其关联的虚引用就会被放到引用队列中,通过在引用队列中查看虚引用可以在对象回收之前采取相应的行动。

举个例子:

public class Reference(){
    public static void main(String[] args){
        String str = new String("java对象");
        //创建一个引用队列
        ReferenceQueue rq = new ReferenceQueue();
        //创建一个虚引用
        PhantomReference pr = new PhantomReference(str,rq);
        System.out.println(pr.get());//显示null 因为虚引用实际不会获得对象
        //强制回收
        System.gc();
        System.runFinalization();
        //从引用队列中取出最先进入队列的引用也就是pr
        System.out.println(rq.poll == pr);
    }
}

以上是我对java引用的认识,有不对的欢迎留言指正,又不懂得欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值