JAVA引用篇

java有几种引用?
强软弱虚

1.强引用

String o = new String("123");

只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。

2.软引用

// 假设内存最多20M,先创建一个10M的软引用
 SoftReference<byte[]> m = new SoftReference<>(new byte[1024*1024*10]);
 // gc 回收
  System.gc();
  // m还存在,没有被回收
  System.out.println(m.get());
  // 再创建一个新的对象占用内存15M,已经超出内存最大值,软引用会被回收掉
  byte[] b = new byte[1024*1024*15];
  // m 呗回收,打印出null
  System.out.println(m.get());

在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常

3.弱引用

WeakReference m = new WeakReference<>(new M());
        System.out.println(m.get());
        System.gc();
        // gc 后,弱引用被回收
        System.out.println(m.get());

只要有gc,弱引用都会被回收

4.虚引用
get不到对象,但是回收的时候会给你一个信号,一般用来管理直接内存,构造函数里除了对象,还有一个队列。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值