关于Hash集合以及Java中的内存泄漏

版权声明:本文为博主原创文章,未经博主允许不得转载。
Hash集合主要有HashMap、HashTable以及HashSet,前两者的区别在于HashMap允许null值且unsynchronized,而最后一个为Set。Hash集合的特点在于其通过哈希算法在内存中存储以及检索元素。这么做的目的在于将分配给该集合的内存区域划分为若干份(bucket),然后通过hashCode方法为每一个集合元素获取一个哈希码,根据哈希码将元素存储于特定的内存区域,在检索时也可以根据检索对象的哈希码,先确定所在区域,之后遍历查找,从而提升效率。HashMap的构造方法中的参数有两个,一个为initial capacity,一个为load factor。
几个需要注意的小问题:
1)哈希集合的元素一旦添加后,一般不要更改集合元素中的参与了hashCode方法计算的字段的值,否则,哈希码值会发生变化,从而导致无法检索到原对象,会引起内存泄漏(MemoryLeak);
2)哈希集合中的contains/remove/put(或add)等方法底层都依赖于equals方法;
3)equals与hashcode的关系:两个对象a1.equals(a2)==true则必能推出a1.hashCode()==a2.hashCode(),而反之则不一定,比如String对象“BB"与"Aa"二者的哈希码都是2112,但二者明显不相等;
4)关于内存泄漏:
1、概念:用动态存储分配函数开辟的内存空间在使用完毕后未释放,一直占据内存空间直至程序结束。动态分配存储地址是堆heap内存常用的内存分配方式。
2、Java中有垃圾回收器机制(Garbage Collection)会及时回收内存空间,不必程序员手动处理,简化了编程工作,减轻了程序员的操作难度,但同时也增加了程序运行的时间,因为GC需要一直监视某个对象在程序中的状态,以决定是否回收。GC的回收策略也有多种,可以根据情况选择,比如内存使用到达某个量值后开始回收,定时回收,平缓回收等等。
关于Hash集合以及Java中的内存泄漏的更多相关文章
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏
转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...
- Java中的内存泄漏
[转]介绍Java中的内存泄漏 1. 什么是内存泄漏? 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 要想理解这个定义,我们需要先了解一下对象在内存中的 ...
- Java中的内存泄漏问题
今天来谈谈Java语言中的内存泄漏问题,可能还有人不知道什么是内存泄漏,先来说下内存泄漏的概念. 内存泄漏:比较正式的说法是,不再使用的对象,却不能被Java垃圾回收机回收.用我的话来说,就是Java ...
- 详细Java中的内存泄漏
1.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Hea ...
- Java中的内存泄漏分析说明
Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...
- 如何识别Java中的内存泄漏
Java开发人员都知道,Java利用垃圾回收机制来自动保持应用程序内存的干净和健康.然而可能有人不知道的是,即使使用了垃圾回收机制,Java中仍然可能存在内存泄漏风险.如果你碰到下面的错误代码: ja ...
- Java技术——Java中的内存泄漏
. OOM的常见类型 按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: 程序计数器:当前线程执行的字节码的行号指示器,线程私有. JAVA虚拟机栈:Java方法执行的内存模型,每个Java ...
- Java中的内存泄露 和 JVM GC(垃圾回收机制)
一.什么是Java中的内存泄露? 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点, 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连:其次,这些对象是无用的,即程序以 ...
- 在 JNI 编程中避免内存泄漏
JAVA 中的内存泄漏 JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java Heap 的内存泄漏:JVM 内存中 native memory 的内存泄漏. Java H ...
随机推荐
- 【ASP.NET Identity系列教程(三)】Identity高级技术
注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- Docker指定multiple Insecure registry的方法
Docker如果需要从非SSL源管理镜像,需要配置Docker配置文件的insecury-registry参数,一般在如下位置修改其配置文件: * /etc/sysconfig/docker * /e ...
- 【USACO 1.4】Mother's Milk
/* TASK: milk3 LANG: C++ SOLVE: 倒水,dfs,枚举每一种倒法,ca[i][j]记录a和c桶的状态,因为总体积不变,故b的状态不需要记录. */ #include< ...
- 【POJ 3525】Most Distant Point from the Sea(直线平移、半平面交)
按逆时针顺序给出n个点,求它们组成的多边形的最大内切圆半径. 二分这个半径,将所有直线向多边形中心平移r距离,如果半平面交不存在那么r大了,否则r小了. 平移直线就是对于向量ab,因为是逆时针的,向中 ...
- R语言之RCurl实现文件批量下载
前言: RCurl工具包的作者是由Duncan Temple Lang现任加州大学 U.C. Davis分校副教授.他曾致力于借助统计整合进行信息技术的探索.使用者通过RCurl可以轻易访问网页,进行 ...
- KM算法及其优化的学习笔记&&bzoj2539: [Ctsc2000]丘比特的烦恼
感谢 http://www.cnblogs.com/vongang/archive/2012/04/28/2475731.html 这篇blog里提供了3个链接……基本上很明白地把KM算法是啥讲清楚 ...
- BeautifulSoup_python3
1.错误排除 bsObj = BeautifulSoup(html.read()) 报错: UserWarning: No parser was explicitly specified, so I' ...
- 【BZOJ-1178】CONVENTION会议中心 倍增 + set (神思路好题!)
1178: [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 812 Solved: 323[Subm ...
- VS调试时同时启动多个项目解决方法
选中要设置的项目,不要右击里面的属性,而是按f4时显示属性,下面总是在调试时启动设为false.
- ecshop /flow.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP的配送地址页面网页没有验证地区参数的有效性,存在sql注入漏 ...