关于WeakhashMap与HashMap之间的区别和联系

  package collection;

  import java.lang.ref.PhantomReference;

  import java.lang.ref.ReferenceQueue;

  import java.lang.ref.SoftReference;

  import java.lang.ref.WeakReference;

  import java.util.HashMap;

  import java.util.WeakHashMap;

  class MyArray{

  byte[] bytes = new byte[3*1024*1024]; //即占用3M

  }

  class Test{

  }

  public class TestReference {

  public static void main(String[] args) {

  // //引用队列

  // //将软引用对象关联成一个key值,添加到队列里,遍历 队列中每个元素分别找到其在 HashMap里的位置,然后把结点(key,value)完全删除掉

  // ReferenceQueue queue = new ReferenceQueue<>();

  // //创建一个软引用对象

  // SoftReference softReference = new SoftReference<>(new MyArray(), queue);//当对象被回收时,会直接入到queue里

  // //获取软引用对象(softReference)

  // System.out.println(softReference.get());

  // //判断是否被回收(true 被回收 入到队列)

  // System.out.println(softReference.isEnqueued());

  // // -Xms3M -Xmx5M 即初始给堆3M空间,最大是5M空间 右键-》 run configurations——》设置虚拟机参数

  // //System.gc();//可模拟垃圾回收

  // byte[] array = new byte[3*1024*1024];

  //

  // System.out.println(softReference.get());

  // System.out.println(softReference.isEnqueued());

  // // 弱引用对象

  // ReferenceQueue queue = new ReferenceQueue<>();

  // WeakReference weakReference = new WeakReference<>(new Test(), queue);

  //

  // System.out.println(weakReference.get());

  // System.out.println(weakReference.isEnqueued());

  //

  // System.gc();

  //

  // System.out.println(weakReference.get());

  // System.out.println(weakReference.isEnqueued());

  //

  // //虚引用对象

  // ReferenceQueue queue = new ReferenceQueue<>();

  // PhantomReference phantomReference = new PhantomReference<>(new Test(), queue);

  // //进程的执行,需要线程的支持

  // //垃圾回收作为一个线程(等CPU分配时间片)支持虚拟机的执行

  // //JDK(或虚拟机)里垃圾回收线程是随机启动的,调用 System.gc();可以手动回收

  // System.gc();

  // if(phantomReference.isEnqueued()){

  // System.out.println("该对象已经被回收");

  // }else{

  // System.out.println("该对象已经被回收");

  // }

  }

  }