Regular reference
Soft
Used for memory cache, only gc when memory not enough
Weak
Used for storing data, only gc on the second time. Example: ClassLoader
Phantom
Used only for monitoring if object has already been gc
Reference Queue
When an object has been gc, we can poll it from ReferenceQueue
import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; public class ReferenceType { public static void main(String[] args) throws InterruptedException{ String s1 = new String("aaa"); String s2 = new String("bbb"); String s3 = new String("ccc"); ReferenceQueue<String> srq = new ReferenceQueue<String>(); SoftReference<String> ss = new SoftReference<String>(s1,srq); ReferenceQueue<String> wrq = new ReferenceQueue<String>(); WeakReference<String> ws = new WeakReference<String>(s2,wrq); ReferenceQueue<String> prq = new ReferenceQueue<String>(); PhantomReference<String> ps = new PhantomReference<String>(s3,prq); s1 = null; s2 = null; s3 = null; System.gc(); System.out.println("ss="+ss.get()); System.out.println("srq="+srq.poll()); System.out.println("ws="+ws.get()); System.out.println("wrq="+wrq.poll()); System.out.println("ps="+ps.get()); System.out.println("prq="+prq.poll()); } }
Output result
ss=aaasrq=nullws=nullwrq=java.lang.ref.WeakReference@15db9742ps=nullprq=java.lang.ref.PhantomReference@6d06d69c
No comments:
Post a Comment