今天在看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对象还存在";
@Override
public String toString() {
return strTest;
@Override
protected void finalize() throws Throwable {
System.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 - 博客园
一直以来,都很喜欢用Map,在小规模应用中,用用Map也没什么,但是应用一大,内存应用方面就要注意了。 几个月前,做项目的时候用到Map,在一篇文章中,我记得说过Map的回收有问题,一试,果然,...
来自:
weixin_30826095的博客
一直以来,都很喜欢用Map,在小规模应用中,用用Map也没什么,但是应用一大,内存应用方面就要注意了。 几个月前,做项目的时候用到Map,在一篇文章中,我记得说过Map的回收有问题,一试,果然,当设...
来自:
待定的专栏
1.HashMap的问题: public class testHashMap{ public static HashMap map; public static vo...
来自:
daojin505的专栏
根据论坛讨论总结,以下代码会出现内存泄漏import java.util.HashMap;import java.util.Map;public class HashMapOver { ...
来自:
chris的专栏
HashMap使用和原理分析(以及内存优化)HashMap:通过链地址法存放键值对的一种数据结构 链地址法:(开散列方法):设散列表地址空间的位置从0~m-1,则通过对所有的Key用散列函数计算出存放...
来自:
5ingwings(SiHao)的博客
有规律的整数/字符串 @Test public void testHashSize() { HashMap<String, Integer> in...
来自:
Tal.Yuan
介绍WeakHashMap自然联想到的是HashMap。确实,WeakHashMap与HashMap一样是个散列表,存储内容也是键值对。与HashMap类似的功能就不展开了,本文重点关注在WeakHa...
来自:
hellozhxy的博客
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 Ha...
来自:
crossoverJie专栏
python常见知识点梳理摘要:本文主要介绍一些平时经常会用到的python基础知识点,用于加深印象。python的详细语法介绍可以查看官方编程手册,也有一些在线网站对python语法进行了比较全面的...
来自:
m0_46245938的博客
昨天刚刚讲解了Java中的引用和引用队列,今天就趁热打铁,讲讲WeakHashMap的弱键回收机制。 目录:WeakHashMap介绍 WeakHashMap例子 WeakHashMap的使用场景 W...
来自:
u014294681的博客
JAVA中HashMap如何删除元素 java编程语言编程专业回答tianheww2015-09-1209:56HashMap的结构是想要移除某个元素,只要移除某个key下面的value即可。如:pa...
来自:
evilcry2012的专栏
英雄不问出处?自古以来就有这样一句话,真的英雄不问出处吗?这句话太挫了。普通三本院校的我,大四的时候居然都不知道什么是校招,所以出处太重要了。这也是没有机会参加阿里校招的原因,毕竟校招门槛比社招还是要...
来自:
码匠笔记
大家好,我是菜到不行的程序员,这是我第一次写博客,有什么不对的地方欢迎指教。 闲话少说,今天自己在总结map的时候,想到了在释放Map对象空间的时候就有使用过将Map对象置null,也有时候会调...
来自:
菜到不行的程序员的博客
最近研究Lucene的时候,遇到的用到大量Map的问题,心生好奇,想看一下在1W,10W,100W三种数据量下,new HashMap ,与 HashMap.clear()方法的效率问题。提前说明:就...
来自:
weixin_34253539的博客
文章目录前言集合体系listArrayListLinkedListVectorsetHashSet为什么HashSet不能重复LinkedHashSetTreeSetmapHashMap的工作原理Ha...
来自:
张胜豪的博客
前奏:今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。以下就是他的简历和面试情况。基本情况:专业技能:1、 熟悉Sping了解SpringMVC、SpringBoo...
来自:
HarderXin的专栏
一、背景二、爬取数据三、数据分析1、总人口2、男女人口比例3、人口城镇化4、人口增长率5、人口老化(抚养比)6、各省人口7、世界人口四、遇到的问题遇到的问题1、数据分页,需要获取从1949-2018年...
来自:
猪哥
初识 MyBatisMyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简...
来自:
c旋儿的博客
目录1、普通二维码2、艺术二维码3、动态二维码在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码。GitHu...
来自:
不脱发的程序猿
1.(1)Map接口:HashMap、HashTable、TreeMap和LinkedHashMap;(2)HashMap不是线程安全的。(3)HashTable是线程安全的。2.JDK1.8对Has...
来自:
Muyu_Z的博客
package Weakmap;import java.util.WeakHashMap;public class About_weakmap {public static void main(Str...
来自:
我的笔记
看到的好文(我的好文都是我能看懂的,说明写的很详细啦),转载记录学习~ 不过人家也是转载的,不管啊,好文都要分享哒~~前言 几个月前,上线了一个版本。但是上线了几个小时之后 CPU 突然暴增至99%,...
来自:
技术与生活齐头并进
在Java中可通过三种方式来实现多线程:1、继承Thread类,重写run( )方法;2、实现Runnable接口,重写run( )方法;3、实现Callable接口,重写call( )方法并使用Fu...
来自:
谷哥的小弟
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上...
来自:
程序员阿康
终于学习到了算法部分, 在学习算法时, 我们还是应该回顾一下数据结构与算法之间的关系数据结构是研究数据的组织方式, 是算法的基础算法是解决编程问题的方法论, 是程序的灵魂程序= 数据结构+算法排序算法...
来自:
时间静止
首先我们必须得知道Tomcat就是一个服务,一个本地服务,我们可以控制启动和停止,我们程序员通过这个服务主要是用来存放我们的java程序,当我们把Java程序放进Tomcat服务中,一旦Tomcat服...
来自:
程序员宜春的博客
NO.1 有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。解法有时候,严格的限制条件有可能反倒是解题的线索...
来自:
郝某人的博客
正文我先描述一下bug的现象哈:这两个输入框的值都是我从KV(Redis之类的存储中间件)里面获取到的,也是可以实时修改的,我自作聪明,想着KV里面如果没值,就默认取一个静态变量,这样有个兜底,在类加...
来自:
泇V:haolagui521领程序员进阶
python多线程爬取某网站全部h漫画首发于个人博客:https://gunnerx.github.io/前言最近学习python多线程与爬虫相关知识,想试着练练手。正好想到常逛的一个正(se)经(q...
来自:
qq_41620646的博客
一直想写一些东西记录自己的成长,以前就是想了又想,不如直接行动起来。 全国人民都盼望着武汉疫情的拐点,我想每个人都没有想到疫情会传播如此的迅速。如果用大数据统计一下医务人员、捐赠物运输车辆、医用防...
来自:
liliangnike的博客
这篇文章其实已经准备了11个月了,因为虽然我们年初就开始使用 Angular 的微前端架构,但是产品一直没有正式发布,无法通过生产环境实践验证可行性,11月16日我们的产品正式灰度发布,所以是时候分享...
来自:
柚橙论
由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!整理了一份Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookee...
来自:
kxkxyzyz的博客
概述为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比如何优化设计数据库时:数据...
来自:
qq_41864967的博客
MySQL入门之常用命令My Blog[ 我的博客 ] :新零云博客-云翼校园计划大家可以来学习学习噢!!!先来活跃一下气氛! 没事写写,大佬勿喷1、连接Mysql格式: mysql -h主机地址 ...
来自:
气场五十米的博客
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。有些读者...
来自:
沉默王二
SecureCRT的下载、安装和破解( 过程非常详细!!值得查看)简单介绍下SecureCRT一、SecureCRT的下载二、SecureCRT的安装简单介绍下SecureCRTSecureCRT是一...
来自:
超Ren专属
文章目录1.前言2.知识储备3.爬取静态网站4.爬取动态网站1.前言近日疫情严重,手机已经玩吐了,闲着无聊逛衣服品牌官网发现,结果一时兴起,想学一学python,写一个爬虫下载官网所有最新上架的衣服图...
来自:
namespace_Pt的博客
// 通过map3求出map1中的key和valuepublic class TestMap8 { public static void main(String arg[]) { Set...
来自:
世范水晶
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,...
来自:
Python作业辅导员 - 天元浪子【许向武】