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

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

 package com.otherMapProduce;

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

效果截图:

2.WeakHashMap的简单使用:

 package com.otherMapProduce;

 import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.WeakHashMap;
//WeakHashMap:键为弱引用,回收键后自动删除key-value对象
public class WeakHashMapTest { public static void main(String[] args) { WeakHashMap<String,String> map=new WeakHashMap<String,String>();
//放入测试数据,分别放入常量池对象和非常量池对象,前者不会回收,后者会回收
//常量池对象
map.put("A", "葵花宝典");
map.put("B", "九阴真经");
//非常量池对象
map.put(new String("C"),"九阳神功");
map.put(new String("D"), "乾坤大挪移");
System.out.println("未经过垃圾回收前 : "+map.size());
//借助Set容器构造迭代器将它们读出来
Set<Entry<String, String>> set=map.entrySet();
Iterator it=set.iterator();
System.out.println("存放的数据为:");
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
//通知回收
System.gc();
System.runFinalization();
System.out.println();
System.out.println("经过垃圾回收后: "+map.size());
} }

效果截图:

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

java-初识引用分类及Map实现类WeakHashMap的更多相关文章

  1. Java容器-引用分类与部分Map用法

    目录 1.引用分类 2.了解WeakHashMap.IdentityHashMap.EnumMap 3.同步控制与只读设置 代码实现 1.引用分类(面试) 强引用(StrongReference):引 ...

  2. 【Java多线程系列六】Map实现类

    Map的一些实现类有及其特性 类 线程安全 特性 Hashtable 是 Key不能为null HashMap 否 读写效率最高,但在Java6多线程环境下使用不当可能陷入死循环,进而导致CPU使用率 ...

  3. JAVA 中的 Collection 和 Map 以及相关派生类的概念

    JAVA中Collection接口和Map接口的主要实现类   Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的 ...

  4. JAVA中Collection接口和Map接口的主要实现类

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...

  5. Java并发包——线程安全的Map相关类

    Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...

  6. Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable

    Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...

  7. java 实体对象转Map公共类

    java 实体对象转Map公共类 package org.kxtkx.portal.utils; import java.lang.reflect.Field; import java.util.Ha ...

  8. Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】

    Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...

  9. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

随机推荐

  1. NeuChar 平台使用及开发教程 索引

    什么是 NeuChar? NeuChar 是由盛派(Senparc)团队发布的新一代跨平台服务系统,其中包含了开放的跨平台通讯标准及核心计算模块(Senparc.NeuChar.dll)以及配套的云管 ...

  2. js发送post请求,实现下载文件

    由于业务需求要下载文件的功能: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  3. c++ 获取磁盘句柄

    磁盘的句柄可以用CreateFile函数获得.获得句柄后,就可以配合其他函数对磁盘进行一些操作. int main() { HANDLE hFile = INVALID_HANDLE_VALUE; h ...

  4. emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本

    第6期:智能家居主界面设计配套例子:V6-910_STemWin提高篇实验_智能家居主界面设计(uCOS-III)V6-911_STemWin提高篇实验_智能家居主界面设计(FreeRTOS) 例程下 ...

  5. Android 音视频开发(六): MediaCodec API 详解

    在学习了Android 音视频的基本的相关知识,并整理了相关的API之后,我们应该对基本的音视频有一定的轮廓了. 下面开始接触一个Android音视频中相当重要的一个API: MediaCodec.通 ...

  6. idea 启动调试模式总提示端口58346被占用问题

    在开发的时候,莫名其妙没法用jrebel调试模式启动了tomcat了,最开始以为是后台端口占用问题,然而把后台java程序全部关了都没用.仔细排查,根据提示发现是端口58346被占用了, 于是便在 w ...

  7. [C#]批量修改文件后缀名

    代码: /// <summary> /// 修改文件后缀 /// </summary> /// <param name="extension"> ...

  8. ueditor的简单配置和使用

    在项目中需要使用到富文本编辑器,我们选用的是ueditor,这是由百度web前端研发部开发所见即所得富文本web编辑器,功能比较强大,可以完成文本的编辑,图片的上传等功能.本文对ueditor的配置使 ...

  9. Python内置函数(56)——set

    英文文档: class set([iterable]) Return a new set object, optionally with elements taken from iterable. s ...

  10. CDN边缘节点容器调度实践(上)

    又拍云容器云是基于 Docker 的分布式计算资源网,节点分散在全国各地及海外,提供电信.联通.移动和多线网络,融合微服务.DevOps 理念,满足精益开发.运维一体化,大幅降低分布式计算资源构建复杂 ...