Java四种引用类型

强引用

默认的引用,任何对象被赋值即为强引用;
强引用不会被GC回收。

public class StrongReferenceUsage {  
    @Test  
    public void stringReference(){  
        Object obj = new Object();  
    }  
} 

软引用

只有在内存不足时,软引用才会被GC回收。

@Test  
public void softReference(){  
    Object obj = new Object();  
    SoftReference<Object> soft = new SoftReference<>(obj);  
    obj = null;  
    log.info("{}",soft.get());  
    System.gc();  
    log.info("{}",soft.get());  
}  

弱引用

只要进行GC,弱引用就会被回收。

@Test  
public void weakReference() throws InterruptedException {  
    Object obj = new Object();  
    WeakReference<Object> weak = new WeakReference<>(obj);  
    obj = null;  
    log.info("{}",weak.get());  
    System.gc();  
    log.info("{}",weak.get());  
} 

虚引用

虚引用对象没有被任何的效果,进行GC即被回收;
作用仅仅是被回收后放入引用队列,标识该对象已被回收。
例如:加载一张大内存图片,确认被回收后才读取下一张,防止OOM。

posted @ 2022-11-18 14:54  ubyte  阅读(39)  评论(0)    收藏  举报