Java的四种引用方式

Java有四种引用:强引用、软引用、弱引用、虚引用。引入四种引用的目的:一是为了让程序员通过代码决定对象的生命周期;二是有利于JVM进行垃圾回收。

1.强引用

创建一个对象并将其赋值给一个引用变量,即Object o = new Object();

有引用变量指向的对象属于强引用,永远不会被GC。

只有函数执行完,没有引用关系;或者显性地将引用对象赋值为null,JVM才会回收该对象。

2.软引用:SoftReference

只有内存空间不足时,才会被GC回收。

应用场景:实例保存对一个object的软引用,用来实现内存敏感的高速缓存,eg:网页缓存、图片缓存,可以防止内存泄漏,增强程序的健壮性。

public class User {
    private int id;
    private String name;

    public User() {};
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public string getName() {
        return name;
    }
}

User user = new User(1, "lily");
SoftReference<User> userSoft = new SoftReference<User>(user);
User = null;
String name = usersoft.getName();//可以访问到软引用的属性。

3. 弱引用:WeakReference

只要JVM执行了GC,弱引用对象都会被回收,无论内存是否充足。

4.虚引用:PhantomReference

虚引用不影响对象的生命周期。

虚引用必须与引用队列关联使用,虚引用对象会被放到引用队列中。在GC之前该引用队列中的虚引用对象是null,执行GC后,队列中才会有虚引用对象,但是无法get该对象。GC时会得到一个通知。

5.总结

强引用:不会被回收;

软引用:只有在内存不足才会被回收;

弱引用:执行GC时就会被回收,无论内存是否充足;

虚引用:不影响对象的生命周期,执行GC被回收时会受到通知。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值