您当前的位置:首页 > 计算机 > 编程开发 > Java

Java 弱引用(WeakReference)

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在 java 中,用 java.lang.ref.WeakReference 类来表示。下面是使用示例:

public class test {  
    public static void main(String[] args) {  
        WeakReference<People>reference=new WeakReference<People>(new People("zhouqian",20));  
        System.out.println(reference.get());  
        System.gc();//通知GVM回收资源  
        System.out.println(reference.get());  
    }  
}
class People{  
    public String name;  
    public int age;  
    public People(String name,int age) {  
        this.name=name;  
        this.age=age;  
    }  
    @Override  
    public String toString() { 
        return "[name:"+name+",age:"+age+"]";  
    }  
}

输出结果:

> [name:zhouqian,age:20]
> null

第二个输出结果是 null,这说明只要 JVM 进行垃圾回收,被弱引用关联的对象必定会被回收掉。不过要注意的是,这里所说的被弱引用关联的对象是指只有弱引用与之关联,如果存在强引用同时与之关联,则进行垃圾回收时也不会回收该对象(软引用也是如此)。比如:将代码做一点小更改:

public class test {  
    public static void main(String[] args) {  
        People people=new People("zhouqian",20);  
        WeakReference<People>reference=new WeakReference<People>(people);//<span>关联强引用</span> 
        System.out.println(reference.get());  
        System.gc();  
        System.out.println(reference.get());  
    }  
} 
class People{  
    public String name;  
    public int age;  
    public People(String name,int age) {  
        this.name=name;  
        this.age=age;  
    }  
    @Override  
    public String toString() {  
        return "[name:"+name+",age:"+age+"]";  
    }  
} // 结果发生了很大的变化  
[name:zhouqian,age:20]  
[name:zhouqian,age:20]

弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被 JVM 回收,这个弱引用就会被加入到与之关联的引用队列中。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐