java引用

参考:海 子的博客,网址:https://www.cnblogs.com/dolphin0520/p/3784171.html

一、弱引用

Object c = new Car(); //只要c还指向car object, car object就不会被回收

WeakReference weakCar = new WeakReference(Car)(car);

弱引用,GC就回收。

 

一、弱引用:当JVM进行垃圾回收的时候,无论内存是否充足,都会回收被弱引用关联的对象。

例子1.
        WeakReference sr = new WeakReference(new String("hello"));
        
        System.out.println(sr.get()); //hello
        System.gc();                //通知JVM的gc进行垃圾回收
        System.out.println(sr.get()); //null  已经回收

例子2.

static class TestObject{

        public void testPrint(){
            System.out.println("测试输出--TestObject");
        }
        
    }

    public static void main(String[] args) throws InterruptedException {
        TestObject toj=new TestObject();
        
        WeakReference weakReference=new WeakReference(toj);
        
        int i=0;
        while(true){
            
            //System.out.println("强引用"+toj); // 此时有强引用,此时无法被回收
            TestObject tl=weakReference.get();
            if(tl!=null){
             i++;    
             System.out.println("Object is alive for "+i+" loops - "+weakReference);
             tl.testPrint();
             
             //System.gc();  //通知回收,但该对象仍然有引用,故无法回收
             
            }else{ //被回收了
                System.out.println("Object has been collected.");
                break;
            }
            
        }
    }

 

2 软引用

空间不足就回收,

A a = new A();

SoftReference sr = new SoftReference(a);

你可能感兴趣的:(Java)