A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-15 21:52  /  896 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


在张老师的视频中提到了:
   如果是一个Hash集合,每次存入删除等操作,都会通过hashcode方法,所以如果修改了某个元素的属性,
   这样在删除该元素的时候,是无法删除的,因为它们已经所属不同的内存块,所以会导致内存泄露,我想问,
   既然java中比较自豪的就是垃圾回收器,那么java机制会不会意识到这一点,进行垃圾回收呢,或者通过其
   他的方式进行处理呢,或者就真的导致内存泄露的大问题 ?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
内存泄露:指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。
System.gc()
Runtime.getRuntime().gc()  
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。
所以在视频中的那个对象有引用的,java垃圾回收机制就不执行了。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在cantains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果。这也会导致从HashSet集合中单独删除当前对象,从而造成内存泄露。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马