首页 > JVM > java的引用类型

java的引用类型

作者:bin

一、强引用
我们正常new一个对象,就是强引用
String hello = new String(“value”);

二、弱引用
重点讲弱引用,释义就是:被弱引用的对象,如果没有其他强引用,那么在gc的时候,就会被回收调

        import java.lang.ref.WeakReference;

/**
 * 弱引用回收测试
 */
public class WeakReferenceDemo {
    public static WeakReference<String> weakReference1;
    //对比
    //public static String hellos;
    public static void main(String[] args) {
        test1();
        //可以输出hello值,此时两个弱引用扔持有对象,而且未进行gc
        System.out.println("未进行gc时,只有弱引用指向value内存区域:" + weakReference1.get());
        //此时已无强一用执行"value"所在内存区域,gc时会回收弱引用
        System.gc();
        //此时输出都为nuill
        System.out.println("进行gc时,只有弱引用指向value内存区域:" + weakReference1.get());

    }
    public static void test1() {
        String hello = new String("value");
        //对比
        //hellos = hello;
        weakReference1 = new WeakReference<>(hello);
        System.gc();
        //此时gc不会回收弱引用,因为字符串"value"仍然被hello对象强引用
        System.out.println("进行gc时,强引用与弱引用同时指向value内存区域:" + weakReference1.get());

    }
}

输出:

进行gc时,强引用与弱引用同时指向value内存区域:value
未进行gc时,只有弱引用指向value内存区域:value
进行gc时,只有弱引用指向value内存区域:null

为了对比,我们将注释打开,此时hello被强引用,即不会被gc回收
输出为:

进行gc时,强引用与弱引用同时指向value内存区域:value
未进行gc时,只有弱引用指向value内存区域:value
进行gc时,只有弱引用指向value内存区域:value

您必须 [ 登录 ] 才能发表留言!