黑马程序员技术交流社区

标题: 关于垃圾回收机制! [打印本页]

作者: 深知一生短暂    时间: 2013-8-18 15:55
标题: 关于垃圾回收机制!
本帖最后由 深知一生短暂 于 2013-8-20 12:09 编辑

虽然说JAVA中有垃圾回收机制,可以自动清理长时间没被使用的空间。
但是,听说java还是能够人为的造成内存泄漏,但我不明白具体怎么做才会造成内存泄漏。
希望大神们指导指导小弟!!!慎防以后在开发无意出现这样的错误?
具体要怎么做会做成内存泄漏?

作者: 深知一生短暂    时间: 2013-8-18 16:13
彻底感受到黑马温暖和人性化的存在。。对版主们满怀感激{:soso_e109:}
好,接下来我要继续努力,保持状态!!{:soso_e130:}大家加油!!!

作者: 胡智    时间: 2013-8-18 16:20
HashSet集合对其元素的判断是依据当中的hashCode()方法得出的哈希值。如果你存入一个元素,然后你改掉了这个元素的内容,导致它的hash值发生改变。这时如果你想在集合中删除这个元素,这个时候就删不了。这种数据多了,就导致内存泄漏。
举个例子:

  1. import java.util.*;
  2. class  Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 HashSet hs = new HashSet();
  7.                 Person p1 = new Person("ni",20);
  8.                 Person p2 = new Person("wo",21);
  9.                 Person p3 = new Person("ta",22);
  10.                 hs.add(p1);
  11.                 hs.add(p2);
  12.                 hs.add(p3);
  13.                 System.out.println(hs.size());//输出是3
  14.                 p1.age = 24;
  15.                 hs.remove(p1);
  16.                 System.out.println(hs.size());//输出的还是3。p1没有被删掉
  17.         }
  18. }
  19. class Person
  20. {
  21.         String name;
  22.         int age;
  23.         Person(String name,int age)
  24.         {
  25.                 this.name = name;
  26.                 this.age = age;
  27.         }
  28.         public int hashCode()
  29.         {
  30.                 return name.hashCode()+age*12;
  31.         }
  32. }
复制代码

作者: 深知一生短暂    时间: 2013-8-18 16:40
胡智 发表于 2013-8-18 16:20
HashSet集合对其元素的判断是依据当中的hashCode()方法得出的哈希值。如果你存入一个元素,然后你改掉了这 ...

学到东西了,但是不是这个情况垃圾回收是不会去清理的?

作者: 胡智    时间: 2013-8-18 17:05
深知一生短暂 发表于 2013-8-18 16:40
学到东西了,但是不是这个情况垃圾回收是不会去清理的?

垃圾回收机制是堆内存中的数据不再被使用时,虚拟机给其当作垃圾处理。
但是刚才例子里面,p1是集合中的元素。虽然集合中的某个元素没有被使用。但是它所在的集合在被引用,被使用。它就不会被当垃圾处理掉。
就像有两瓶水都没人喝,一瓶放在外面没人要,就会被清洁工当垃圾扫走。一瓶放在包里面,但是包是我的,那就不会被当作垃圾扔掉。

作者: 许云龙    时间: 2013-8-18 17:37
资源忘记释放,修改HashMap集合中元素等都可能导致内存泄露
作者: 杨增坤    时间: 2013-8-19 23:23
楼主问题解决了,请把问题的“未解决”更改为“已解决”

谢谢合作!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2