Map map = new HashMap<>();

首先,在创建一个map对象时,map指向堆中新创建的对象,这时候的map是一个没有key和value的空对象。众所周知,

map.hashCode()某种意义上相当返回了对象的地址。所以在用刚创建的map对象调用hashCode()方法:

System.out.println("map.hashCode:"+map.hashCode());

输出结果如下:

再看看hashCode()的源码:

通过源码可以发现,hashCode()方法通过获取key和value返回的哈希值进行异或运算后返回结果值,如果key和value值为空则返

回0。此时我们给map对象put值进去,然后再输出一个hashCode()返回的值:

map.put(1,"霍去病");

map.put(2,"李广");

map.put(3,"刘彻");

map.put(4,"马邑");

map.put(5,"桑弘基");

map.put(6,"苏武");

System.out.println("新map.hashCode:"+map.hashCode());

返回了一串数字,此时说明map中是有数据的,这个时候我们再使用clear()方法将map中的数据清空后再次输出hashCode()返回

的值,发现仍然是0。

map.clear();

System.out.println("after clear:"+map.hashCode());

如果直接将map对象置null,这个时候再次输出hashCode()则不会有输出结果,而是报空指针异常了。

到这里,就很明白了,虽然将map对象的数据都clear()了,key和value为null,但是内存中map对象还存在,并且map

具有强引用,虽然key和value为空,但是JVM的垃圾回收器并不会回收该对象的内存,如果再程序中创建很多这样子的没

有释放的对象就会造成内存泄漏,所以小伙伴们再创建map对象的时候,如果不再用到该对象的时候,要注意及时释放该对象

的内存空间。有什么写的不好的欢迎大家指出,我及时修改好不误人子弟。

java dispose null_Java Map释放内存置null以及调用clear()的区别相关推荐

  1. 指针作为函数参数 进行内存释放 并置NULL

    author:张继飞 写在前面,前面写了代码封装free函数,但是调用封装并退出后,指针并不为NULL,导致接下来以此作为判断条件的时候就出现问题了.先前封装函数为void _free_p_(void ...

  2. java get null_java 获取对象中为null的字段实例代码

    下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述: private static String[] getNullPropertyNames(Object sourc ...

  3. java dispose null_java – 为什么在调用setVisible(false)和dispose...

    我看到的区别是(在JDK 1.7上运行): setVisible(false), invokes componentHidden but not windowClosed (The API state ...

  4. 【Java集合之Map】HashMap、HashTable、TreeMap、LinkedHashMap区别

    Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap.HashTable.LinkedHashMap和TreeMap.本节实例主要介绍这4中实例的用 ...

  5. C++ 之new和delete释放内存

    C++ -释放内存(new和delete) C++动态分配和释放内存 @c.biancheng.net/view/206.html 在C语言中,动态分配内存用 malloc() 函数,释放内存用 fr ...

  6. C/C++申请和释放内存

    new 和 delete 是 C++ 用于管理堆内存的两个运算符,对应于C语言中的 malloc 和 free,但是 malloc 和 free 是函数,而new 和 delete 是运算符.除此之外 ...

  7. java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收

    今天逛脉脉,看见匿名区有人说java中把对做置null,这种做法很菜,不能加速垃圾回收,但是我看到就觉得呵呵了,我是觉得可以加速置null对象回收的. 测试的过程中,费劲的是要指定一个合理的测试堆大小 ...

  8. java一个接口执行结束释放内存_java的灵魂--JVM虚拟机

    JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM体系结构 1.类加载器 负责加载class文件,class文件在文件开头有特定的文件标示, 并且ClassLoader只负责class文件的 ...

  9. 释放内存触发断点及数组、指针的NULL初始化

    Visual Studio调试时,出现"触发一个断点"内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; ...

最新文章

  1. LeetCode中等题之两两交换链表中的节点
  2. JavaScript初学者编程题(3)
  3. 一种实时轻量级3D人脸对齐方法
  4. Linux下的inode记录
  5. SAP Spartacus root.scss里的变量层级引用
  6. mvc 视图和模型的对应_通过在酒吧订购饮料来解释模型视图控制器(MVC)
  7. Java 数组的拷贝(复制一个相同数组)
  8. kali安装后的基本配置
  9. restlet使用_使用Restlet Framework构建联网汽车
  10. [一分钟先生]涂勇:通过跳槽走上管理岗位不可取
  11. 华为机试HJ105:记负均正II
  12. post 和 get 网站
  13. DFS ZOJ 1002/HDOJ 1045 Fire Net
  14. 移动支付变巨头掘金地,银盒子手握SaaS成新宠
  15. Android Study 之 聊聊有关SVG那些事儿
  16. 农村信用社招聘计算机类进去干啥,2008年山东农村信用社招聘考试计算机类的范围有知道的吗?...
  17. 移动网关贝尔G-140W-C 修改wifi前缀去掉CMCC
  18. 互联网公司,产品和测试的那些人和事
  19. 贝叶斯视角下的机器学习
  20. James Gosling : Java之父

热门文章

  1. U盘安装Linux安装报错及解决方案
  2. 获得一个日期在当周是否有节日并返回日期
  3. linux X11窗口转发配置简记
  4. Cannot load 64-bit SWT libraries on 32-bit JVM 解决方法
  5. OpenCV-获取图像中直线上的数据
  6. linux同步某台服务器,linux 两台服务器之间开机自动同步指定目录下的文件
  7. linux调用线程函数,作为线程调用的C函数-Linux Userland程序
  8. Shell脚本基本用法
  9. git21天打卡day12切换分支修改文件
  10. c语言语法sc,适合于嵌入式系统的C语言单元测试框架:SCUNIT