JDK6.0学习笔记(二)垃圾收集机制-对象引用的类型

来源:互联网 发布:vb.net 资源文件exe 编辑:程序博客网 时间:2024/05/22 17:45
  1. import java.lang.ref.SoftReference;
  2. import java.lang.ref.WeakReference;
  3. import java.lang.ref.PhantomReference;
  4. import java.lang.ref.ReferenceQueue;
  5. import java.util.Set;
  6. import java.util.HashSet;
  7. /** 
  8.  * 对象引用的类型
  9.  * 弱引用和虚引用被 System.gc();回收,强引用对象,除非显示的置为  a=null; 
  10.  *  否则不会被立刻回收 
  11.  */
  12. public class TestReferences {
  13.     public static void main(String[] args) {
  14.         int length = 10;
  15.         // 创建length个MyObject对象的强引用
  16.         Set<MyObject> a = new HashSet<MyObject>();
  17.         for (int i = 0; i < length; i++) {
  18.             MyObject ref = new MyObject("Hard_" + i);
  19.             System.out.println("创建强引用:" + ref);
  20.             a.add(ref);
  21.         }
  22.         // a=null;
  23.         System.gc();
  24.         // 创建length个MyObject对象的软引用
  25.         Set<SoftReference<MyObject>> sa = new HashSet<SoftReference<MyObject>>();
  26.         for (int i = 0; i < length; i++) {
  27.             SoftReference<MyObject> ref = new SoftReference<MyObject>(
  28.                     new MyObject("Soft_" + i));
  29.             System.out.println("创建软引用:" + ref.get());
  30.             sa.add(ref);
  31.         }
  32.         System.gc();
  33.         // 创建length个MyObject对象的弱引用
  34.         Set<WeakReference<MyObject>> wa = new HashSet<WeakReference<MyObject>>();
  35.         for (int i = 0; i < length; i++) {
  36.             WeakReference<MyObject> ref = new WeakReference<MyObject>(
  37.                     new MyObject("Weak_" + i));
  38.             System.out.println("创建弱引用:" + ref.get());
  39.             wa.add(ref);
  40.         }
  41.         System.gc();
  42.         // 创建length个MyObject对象的虚引用
  43.         ReferenceQueue<MyObject> rq = new ReferenceQueue<MyObject>();
  44.         Set<PhantomReference<MyObject>> pa = new HashSet<PhantomReference<MyObject>>();
  45.         for (int i = 0; i < length; i++) {
  46.             PhantomReference<MyObject> ref = new PhantomReference<MyObject>(
  47.                     new MyObject("Phantom_" + i), rq);
  48.             System.out.println("创建虚引用:" + ref.get());
  49.             pa.add(ref);
  50.         }
  51.         System.gc();
  52.     }
  53. }
  54. class MyObject {
  55.     private String id;
  56.     public MyObject(String id) {
  57.         this.id = id;
  58.     }
  59.     public String toString() {
  60.         return id;
  61.     }
  62.     public void finalize() {
  63.         System.out.println("回收对象:" + id);
  64.     }
  65. }