java-初识引用分类及Map实现类WeakHashMap
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的更多相关文章
- Java容器-引用分类与部分Map用法
目录 1.引用分类 2.了解WeakHashMap.IdentityHashMap.EnumMap 3.同步控制与只读设置 代码实现 1.引用分类(面试) 强引用(StrongReference):引 ...
- 【Java多线程系列六】Map实现类
Map的一些实现类有及其特性 类 线程安全 特性 Hashtable 是 Key不能为null HashMap 否 读写效率最高,但在Java6多线程环境下使用不当可能陷入死循环,进而导致CPU使用率 ...
- JAVA 中的 Collection 和 Map 以及相关派生类的概念
JAVA中Collection接口和Map接口的主要实现类 Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的 ...
- JAVA中Collection接口和Map接口的主要实现类
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...
- Java并发包——线程安全的Map相关类
Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...
- Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable
Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...
- java 实体对象转Map公共类
java 实体对象转Map公共类 package org.kxtkx.portal.utils; import java.lang.reflect.Field; import java.util.Ha ...
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- Java初识
基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...
随机推荐
- python+SQLAlchemy+爬虫
python+SQLAlchemy+爬虫 前面分享了SQLAlchemy的知识,这次我共享一下学习用python开发爬虫再把爬出来的数据放到用SQLAlchemy的数据库上面的知识,当然我这个是带测试 ...
- 操作XML
别人已经写过很好的XML辅助类,可以直接引用后使用: 我这里自己写一个xml的操作类,目前能实现的是对一个不含集合的类可以操作,含集合的类无法将集合里的数据读取出来, 首先定义一个XML特性,用于区分 ...
- NodeJS NPM 镜像使用方法
每次npm的时候,走国外的镜像,非常的慢,可以配置一下 通过改变默认npm镜像代理服务,以下三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候不用重新配置. 通过config命令 ...
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
作者:林蓝东 最近的一个手机 QQ 版本发出去后收到比较多关于 CoreMotion 的 crash 上报,案发现场如下: 但是看看这个堆栈发现它完全不按照套路出牌啊! 乍一看是挂在 CoreMoti ...
- 阿里面试100%问到,JVM性能调优篇
JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标. 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集 ...
- [Swift]LeetCode198. 打家劫舍 | House Robber
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
- [Swift]LeetCode735. 行星碰撞 | Asteroid Collision
We are given an array asteroids of integers representing asteroids in a row. For each asteroid, the ...
- mac连接windows远程桌面及文件复制
最近更换mac办公,但由于之前是用windows,所以很多文件项目之类的东西都还在windows电脑中,一次都传到mac上又会比较占内存,并且使用率也不高,感觉不划算.但每次想用的时候,在从windo ...
- 微信公众号的开发 Senparc.Weixin.dll使用
项目需要,做个微信公众号,之前从未做过,前期挺懵的,再次记录一下,一切困难都是纸老虎(哈哈) 服务号是公司申请的微信公共账号,订阅号是个人申请的.建议开发者自己申请一个测试账号,方便使用,但是测试账号 ...
- partition分区
1.按id拆分 mysql -uroot mysql>use test; mysql>create table topic ( tid ) not ),partition t1 value ...