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 ...
随机推荐
- 1.8 Double-Opening and Virtual Machine
Since plug-in will be replaced by RN as following years, what is the future of plug-in? the answer i ...
- js发送post请求,实现下载文件
由于业务需求要下载文件的功能: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- 高级Java面试总结3
1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...
- [Swift]LeetCode129. 求根到叶子节点数字之和 | Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- [Swift]LeetCode468. 验证IP地址 | Validate IP Address
Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither ...
- 微信公众号的开发 Senparc.Weixin.dll使用
项目需要,做个微信公众号,之前从未做过,前期挺懵的,再次记录一下,一切困难都是纸老虎(哈哈) 服务号是公司申请的微信公共账号,订阅号是个人申请的.建议开发者自己申请一个测试账号,方便使用,但是测试账号 ...
- 树莓派pwm驱动好盈电调及伺服电机
本文讲述如何通过树莓派的硬件PWM控制好盈电调来驱动RC车子的前进后退,以及如何驱动伺服电机来控制车子转向. 1. 好盈电调简介 车子上的电调型号为:WP-10BLS-A-RTR,在好盈官网并没有搜到 ...
- 看懂Azure ML、Windows ML和ML.NET
最新2018微软中国人工智能大会刚刚落下帷幕,对于.NET开发者,可能早已被眼花缭乱的微软家AI体系弄晕了.我特意整理了几张图,以示区别. Azure ML提供了大量认知API服务,外加一个机器学习的 ...
- .NET Core protobuf-net、MessagePack、Json.NET序列化/反序列化性能测试
测试代码Zonciu/SerializationTest.cs, 源自neuecc/ZeroFormatterBenchmark.cs. NuGet包及其版本 mgravell/protobuf-ne ...
- 重排序、hb、ConcurrentHashMap弱一致性(jdk1.6)
double pi = 3.14; //A double r = 1.0; //B double area = pi * r * r; //C 1.A -> B //不满足happens- ...