Java强软弱虚4大引用

前言:

System.gc(),实际上System.gc()调用的又是 Runtime.getRuntime().gc();
gc它的缺点就是无法根据我们的需求去回收内存,这时候就要说到java 1.2引入的4个引用类型。强软弱虚。这4个引用出现的背景实际上就是为了我们在一定程度上对gc的可控,让它变得尽量的符合我们对内存分配的预期。

强引用:

强引用就是Object o = new Object()这种,这里的强是类似强耦合这种意味,强引用即便是抛出oom也不会解除该对象在内存中占用的空间。

软引用:

一个软引用指向一个强引用所指向的堆内存中的对象时,注意这个时候是2个引用指向同一个对象,系统要抛oom的时候,gc会去回收这个对象,因此软引用也具备了”让内存对象在oom之前释放”这种能力。

例子:

public static void softrefrence() {
    String str = "abc";
    SoftReference<String> soft = new SoftReference<String>(str);
}

弱引用:

一个弱引用指向一个强引用所指向的堆内存中的对象时,注意这个时候是2个引用指向同一个对象,当强引用被意外销毁的时候,gc回回收它。

例子:

public static void weakrefrence() {
    String str = "abc";
    ReferenceQueue<WeakReference> wq; = new ReferenceQueue<>();
    WeakReference wref = new WeakReference(str,wq);
    System.out.println(wref.get());
    str = null;
    System.gc();
    System.out.println(wref.get());
}

虚引用:

虚引用其实和上面讲到的各种引用不是一回事的,他主要是为跟踪一个对象何时被GC回收(结合RefrenceQuene)。在android里面也是有用到的:FileCleaner.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值