java 的四种引用以及它的使用场景

参考:java中四种引用类型

简介

在java1.2开始,为了使程序能更加灵活的控制对象的生命周期,将对象的引用分为四种级别.

详细说明

  1. 强引用(StrongReference)
    强引用是使用最广泛的引用.如果一个对象具有强引用,那么垃圾回收器据对不会回收它.当空间不足时,jvm宁愿抛出OutOfMemoryError错误,是程序异常终止,也不会通过回收强引用的对象来解决内存不足的问题.

如果想中断强引用与某个对象的联系,可以显式的将引用地址赋值为null,这样一来,JVM就会在合适的时间回收该对象.

People  P = new People("张三",20); 
P = null;

2.软引用(SoftReference)
如果一个对象只具有软引用,而且内存空间足够,垃圾回收器就不会回收它.

如果内存空间不足,就会回收这些对象的内存

软引用非常适合于创建缓存,当系统内存不足的时候,缓存的内容是可以被释放的.

public class soft {
    public static void main(String[] args) {
        //软引用 作用之  缓存
        SoftReference<MyArray> softReference = new SoftReference(new MyArray());
        System.out.println(softReference.get()); //内存不够时回收
        byte[] arr = new byte[1024*1024*3];
        System.gc();
        System.out.println( softReference.get());
    }
}
class MyArray {
    byte[] arr = new byte[1024 * 1024 * 3];
}
  1. 弱引用(WeakReference)
    它的作用是引用一个对象,但是并不阻止该对象被回收,GC发生的时候,会立即回收弱引用对象.

使用场景:

  • 网页缓存
  • WeakHashMap : 在哈希表中,如果哈希表对象对键值对是强引用,只要哈希表对象存在,所包含的键和值是不会被回收的.最终可能消耗JVM全部的内存,

解决的办法就是使用弱引用引用这些对象,这样哈希表中的键和值都能被回收.

WeakHashMap实际应用: 可以用来保存聊天记录.

public class weakReference {
    public static void main(String[] args) {
        //弱引用 weak Reference 使用场景 :     网页缓存
        WeakReference weakReference = new WeakReference(new people());
        System.out.println(weakReference.get());
        System.gc();//只是给了一个信号,具体回收时机还是由JVM决定
        System.out.println(weakReference.get());
    }
}
class people {
    String name;
}

在这里插入图片描述
4. 虚引用(PhantomReference)

Java的对象终止机制(finalization).在Object类里面有个finalize方法,其设计的初衷是在一个对象被真正回收之前,可以执行一些清理的工作,就通过finalize()实现.

但是gc的时间是不能确定的,.虚引用可以解决这个问题,垃圾回收器回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。然后在回收之前采取必要的操作.

更通俗的来讲 :GC之后能找出来刚刚被回收的那个对象的地址

使用场景: 主要用来实现精细的内存使用控制.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值