黑马程序员技术交流社区
标题:
内存泄露问题
[打印本页]
作者:
胡文彬
时间:
2014-3-15 21:52
标题:
内存泄露问题
在张老师的视频中提到了:
如果是一个Hash集合,每次存入删除等操作,都会通过hashcode方法,所以如果修改了某个元素的属性,
这样在删除该元素的时候,是无法删除的,因为它们已经所属不同的内存块,所以会导致内存泄露,我想问,
既然java中比较自豪的就是垃圾回收器,那么java机制会不会意识到这一点,进行垃圾回收呢,或者通过其
他的方式进行处理呢,或者就真的导致内存泄露的大问题 ?
作者:
等风来_________
时间:
2014-3-16 18:52
内存泄露:指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。
System.gc()
Runtime.getRuntime().gc()
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。
所以在视频中的那个对象有引用的,java垃圾回收机制就不执行了。
作者:
小龙编程世界
时间:
2014-3-16 22:03
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在cantains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果。这也会导致从HashSet集合中单独删除当前对象,从而造成内存泄露。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2