java 引用类型---强软弱虚

1.强引用 

我们一般new一个对象,然后指向这个对象的引用就是强引用。

只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

2.软引用

软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。

package leetcode0606.RefType;

import java.lang.ref.SoftReference;

public class SoftRef {
    // 适合做缓存
    // 空间不够了,软引用会被干掉
    public static void main(String[] args) {
        //开辟一个10M的堆内存,假设我的堆内存为20M
        SoftReference softReference = new SoftReference<>(new byte[1024*1024*10]);
        System.out.println(softReference);
    
        byte[] bytes = new byte[1024*1024*15];

    }
}

3.弱引用

相当于没引用,假如在堆内存中,那么GC会直接回收。

无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收

主要应用:ThreadLocal的set方法

4.虚引用

get不到的对象,虚引用指向的对象被GC回收时,会被扔到一个引用队列里。

当GC线程发现引用队列中加入了新元素,那么我看一下她有没有指向堆外内存,有的话借助JVM进行清理。

package leetcode0606.RefType;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

public class PhantomRef {
    //用于直接内存
    public static void main(String[] args) {
        byte[] byete=new byte[1024];
        ReferenceQueue<Object> objectReferenceQueue = new ReferenceQueue<>();
        PhantomReference<Object> objectPhantomReference = new PhantomReference<>(byete,objectReferenceQueue);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值