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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深知一生短暂 中级黑马   /  2013-8-18 15:55  /  1066 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 深知一生短暂 于 2013-8-20 12:09 编辑

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

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1 够了吧

查看全部评分

6 个回复

倒序浏览
彻底感受到黑马温暖和人性化的存在。。对版主们满怀感激{:soso_e109:}
好,接下来我要继续努力,保持状态!!{:soso_e130:}大家加油!!!
回复 使用道具 举报
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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报 1 0
胡智 发表于 2013-8-18 16:20
HashSet集合对其元素的判断是依据当中的hashCode()方法得出的哈希值。如果你存入一个元素,然后你改掉了这 ...

学到东西了,但是不是这个情况垃圾回收是不会去清理的?
回复 使用道具 举报
深知一生短暂 发表于 2013-8-18 16:40
学到东西了,但是不是这个情况垃圾回收是不会去清理的?

垃圾回收机制是堆内存中的数据不再被使用时,虚拟机给其当作垃圾处理。
但是刚才例子里面,p1是集合中的元素。虽然集合中的某个元素没有被使用。但是它所在的集合在被引用,被使用。它就不会被当垃圾处理掉。
就像有两瓶水都没人喝,一瓶放在外面没人要,就会被清洁工当垃圾扫走。一瓶放在包里面,但是包是我的,那就不会被当作垃圾扔掉。
回复 使用道具 举报
资源忘记释放,修改HashMap集合中元素等都可能导致内存泄露
回复 使用道具 举报
楼主问题解决了,请把问题的“未解决”更改为“已解决”

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