HashMap与垃圾回收
今天在看Java核心技术1的时候看到HashMap的对象,书中讲到:
1.如果有一个值,对应的键不再使用他了,但由于key与value之间存在强引用,是不会被垃圾回收的
2.垃圾回收器跟踪活动的对象,只要映射对象是活动的,其中的所有桶也是活动的,它们不能被回收
所以做了下面的测试:
public class TestJava {public static void main(String[] args) {HashMap map = new HashMap();Test t1 = new Test();Test t2 = new Test();map.put(t1, "1");map.put(t2, "2");t1 = null;System.gc();System.out.println("第1步" + map);t2 = null;System.gc();System.out.println("第2步" + map);map.clear();System.gc();System.out.println("第3步" + map);}}class Test {private String strTest = "该Test对象还存在";@Overridepublic String toString() {return strTest;}@Overrideprotected void finalize() throws Throwable {// TODO Auto-generated method stubSystem.out.println("该Test对象被释放了");}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
测试结果:
果然,GC不会回收这两个垃圾,这个跟Java中的HashMap默认是强引用有关的
分析:
愿意:其实HashMap存进去的是t1跟t2指向的地址(堆内存中两条黑色的线)作为key,但进行t1=null,t2=null的时候,本来按照常理来说,Java回收机制会对那些没有引用的堆内存对象进行回收,但不幸的是,HashMap依旧会强引用着t1跟t2的堆内存对象,导致GC无法对其进行回收
下面讲更为深入的讲解HashMap:
1.散列表的原理与实现 - 简书
2.哈希表(散列表)原理详解 - 那年聪聪 - CSDN博客
3.HashMap的存取之美 - gugege - 博客园
4.理解LinkedHashMap - children - 博客园
HashMap与垃圾回收相关推荐
- JVM虚拟机(四):JVM 垃圾回收机制概念及其算法
垃圾回收概念和其算法 谈到垃圾回收(Garbage Collection)GC,需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾箱,然后倒掉.GC中的垃圾,特指存于内存中.不会再被使用 ...
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...
- 浅谈JVM的实现与垃圾回收机制
Java被称为是一个人类可读的编程语言,其主要特点是基于类和面向对象,Java的开源版本被称为OpenJDK.Java编程环境由两个部分组成:Java语言和运行环境,运行环境也称为Java虚拟机(JV ...
- java基础(一):谈谈java内存管理与垃圾回收机制
看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...
- 【深入理解JVM】JVM垃圾回收机制
最近又回头翻了翻<java编程思想>.有关垃圾回收机制的问题还没有总结过,刚好今天周六,总结一下吧. 1.垃圾回收的目的 垃圾回收的目的是查找和回收(清理)无用的对象,以便让JVM更有效的 ...
- Java中的引用类型(强引用、弱引用)和垃圾回收
Java中的引用类型和垃圾回收 强引用Strong References 强引用是最常见的引用: 比如: StringBuffer buffer = new StringBuffer(); 创建了一个 ...
- 深入理解 Java 垃圾回收机制
转载自 http://www.cnblogs.com/andy-zcx/p/5522836.html 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个显著的特点就是引入 ...
- WeakHashMap垃圾回收原理
介绍 WeakHashMap自然联想到的是HashMap.确实,WeakHashMap与HashMap一样是个散列表,存储内容也是键值对.与HashMap类似的功能就不展开了,本文重点关注在WeakH ...
- 深入理解java垃圾回收机制
一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理.由于有个垃圾回收机制 ...
最新文章
- Java知识点总结(JavaIO- System类对IO的支持与Scanner类 )
- Python 小把戏之下载小说
- 2021-04-09 随机模拟—蒙特卡洛方法 Matlab代码实现
- 机器学习中的度量—— 向量距离
- ASP.NET Core 防止跨站请求伪造(XSRF\/CSRF)攻击
- PHP 常用代码大全
- checkbox 多选 mysql 搜索_mySQL技术的方方面面,不管是应用还是面试,看这一文就够了...
- 开发者必备英文网站合集
- Android 使用传感器
- IDEA快速生成测试用例类和完成单元测试
- 【软考网络工程师】华为路由器交换机配置
- Ps修改更换证件照背景色(底色颜色)
- UiAutomator2—By、BySelector
- ISP - bayer 是什么?
- 程序员的十个层次 你属于哪一层?
- java openoffic linux_CentOS 下安装 OpenOffice4.0
- 程序员裸辞三个月,终于拿到大厂offer!网友:不应该!
- ROS机器人高效编程(原书第3版)勘误、问题及资料汇总
- Jess在Eclipse中的安装
- solr4.4.0 集成 carrot2 支持中文和添加自己的中文分词器的方法。
热门文章
- decimal 类型数据怎么引用_Java基本数据类型和引用类型
- java 字节码增强原理_深入浅出Java探针技术1--基于java agent的字节码增强案例
- 封头名义厚度如何圆整_压力容器封头厚度计算
- mysql安装了老版本_Windows环境下MySQL安装教程
- 我和女实习生那些不想说的故事
- SQL语句的添加、删除、修改多种方法
- php禁止代理ip访问_php禁止某ip或ip地址段访问的方法(转载)
- linux 基础学,linux基础学习【1】
- python正则表达式匹配模式屠夫之桥_Python 编程快速上手 第 7章 模式匹配与正则表达式...
- html原生音频播放器倍速,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)