Java Tutorial/Reflection/SoftReference

Материал из Java эксперт
Перейти к: навигация, поиск

A soft reference holds onto its referent until memory becomes low.

   <source lang="java">

import java.lang.ref.SoftReference; public class Main {

 public static void main(String[] argv) throws Exception {
   SoftReference<String> sr = new SoftReference<String>("object");
   Object o = sr.get();
   if (o != null) {
     System.out.println(o);
   } else {
     System.out.println("collected or has been reclaimed");
   }
 }

}</source>





Testing SoftReference

   <source lang="java">

import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; import java.util.HashMap; public class Main {

 public static void main(String[] args) {
   ReferenceQueue referenceQueue = new ReferenceQueue();
   Object object = new Object() {
     public String toString() {
       return "Referenced Object";
     }
   };
   Object data = new Object() {
     public String toString() {
       return "Data";
     }
   };
   HashMap map = new HashMap();
   Reference reference = new SoftReference(object, referenceQueue);
   map.put(reference, data);
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
   object = null;
   data = null;
   System.gc();
   System.out.println(reference.get());
   System.out.println(map.get(reference));
   System.out.println(reference.isEnqueued());
 }

}</source>