Netty-源碼分析WeakReference用例

 

在研究Netty源碼是大量使用了WeakReference引用,它是一個弱引用對象,當GC發生以後,會根據內存情況回收WeakReference引用的對象,屆時WeakReference這個對象會被加入到隊列中,進行最後的資源清理。

public class MyReference extends WeakReference {

    public MyReference(Object referent, ReferenceQueue q) {
        super(referent, q);
    }
}

 

package com.ht.web.nio;

import java.lang.ref.ReferenceQueue;

public class Demo {

	public static void main(String[] args) throws Exception {
		//隊列
		ReferenceQueue q = new ReferenceQueue();
		
		//爲了在GC時能夠回收MyReference引用的對象,我們放一個1G的二進制數據
		//放小對象測試不出效果
		MyReference e = new MyReference(new byte[1024400000], q);
		
		//可以獲取到它引用的對象,說明還沒被回收
		System.out.println(e.get());
		System.gc();
		//這時返回null 說明GC以後MyReference引用的byte被回收了
		System.out.println(e.get());
		//MyReference對象被加入到隊列裏,我們可以最最後的資源清理
		System.out.println("q:" + q.poll());
	}
	
}

 

發佈了175 篇原創文章 · 獲贊 70 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章