zoukankan      html  css  js  c++  java
  • java-初识引用分类及Map实现类WeakHashMap

    1.同样的,话不多讲直接上代码

    (1)认识了解下引用分类及其作用

     1 package com.otherMapProduce;
     2 
     3 import java.lang.ref.WeakReference;
     4 /*
     5  * IdentityHashMap:键只以地址去重,而不是比较hashcode与equals,键是常量池中的字符串
     6  * EnumMap:键必须为枚举的值,构造器:public EnumMap(指定枚举的class对象)
     7  * 引用分类:
     8  * 1.强引用:StrongReference:引用指向对象,gc(Garbage Collection)运行时不回收
     9  * 2.软引用:SoftReference:gc运行时可能回收(jvm内存不够则无法回收)
    10  * 3.弱引用:WeakReference:gc运行时立即回收
    11  * 4.虚引用:PhantomReference类似于无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列(ReferenceQueue)联合使用
    12  * 目的:
    13  * 避免对象长期驻留在内存中,解决垃圾回收机制回收时机问题
    14  */
    15 public class RefenenceTest {
    16 
    17     public static void main(String[] args) {
    18         //常量池字符串,共享(不可回收)
    19         String str="I like codes very much!";
    20         //非常量池字符串
    21         String str2=new String("I like codes very much!");
    22         //弱引用管理对象
    23         WeakReference<String> s=new WeakReference<String>(str);
    24         WeakReference<String> s2=new WeakReference<String>(str2);
    25         System.out.println("垃圾回收前str:"+s.get());
    26         System.out.println("垃圾回收前str2:"+s.get());
    27         //断开引用
    28         str=null;
    29         str2=null;
    30         //通知回收
    31         System.gc();
    32         System.runFinalization();
    33         System.out.println("垃圾回收后str:"+s.get());
    34         System.out.println("垃圾回收后str2:"+s2.get());
    35     }
    36 }

    效果截图:

    2.WeakHashMap的简单使用:

     1 package com.otherMapProduce;
     2 
     3 import java.util.Iterator;
     4 import java.util.Map.Entry;
     5 import java.util.Set;
     6 import java.util.WeakHashMap;
     7 //WeakHashMap:键为弱引用,回收键后自动删除key-value对象
     8 public class WeakHashMapTest {
     9 
    10     public static void main(String[] args) {
    11         
    12         WeakHashMap<String,String> map=new WeakHashMap<String,String>();
    13         //放入测试数据,分别放入常量池对象和非常量池对象,前者不会回收,后者会回收
    14         //常量池对象
    15         map.put("A", "葵花宝典");
    16         map.put("B", "九阴真经");
    17         //非常量池对象
    18         map.put(new String("C"),"九阳神功");
    19         map.put(new String("D"), "乾坤大挪移");
    20         System.out.println("未经过垃圾回收前 : "+map.size());
    21         //借助Set容器构造迭代器将它们读出来
    22         Set<Entry<String, String>> set=map.entrySet();
    23         Iterator it=set.iterator();
    24         System.out.println("存放的数据为:");
    25         while(it.hasNext()) {
    26             System.out.print(it.next()+" ");
    27         }
    28         //通知回收
    29         System.gc();
    30         System.runFinalization();
    31         System.out.println();
    32         System.out.println("经过垃圾回收后: "+map.size());
    33     }
    34 
    35 }

    效果截图:

    ps:这里只是简单了解一下引用及WeakHashMap的相关知识,仅供学习并未深入,如有不正之处欢迎大佬指正,必定虚心改正。

  • 相关阅读:
    EF关联
    nopcommerce v3.9中文包
    Android Activity切换与Activity间数据交互
    C#多线程的用法9-Semaphore
    C#多线程的用法8-线程间的协作AutoResetEvent
    C#多线程的用法7-线程间的协作ManualResetEvent
    C#多线程的用法6-线程间的协作Mutex
    C#多线程的用法5-线程间的协作Monitor
    C#多线程的用法4-线程间的协作lock快捷方式
    C#多线程的用法3-线程间的协作Join
  • 原文地址:https://www.cnblogs.com/weekstart/p/10784381.html
Copyright © 2011-2022 走看看