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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘江华 黑马帝   /  2011-10-13 10:12  /  3369 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问Java中内存泄漏到底是怎么一回事。看视频的时候看不懂啊。求救。。

评分

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

查看全部评分

4 个回复

倒序浏览
{:soso__433253175740619224_2:}
按照哈希值放入集合的对象,修改后对象对应的哈希值就改变,之前按原来哈希值放入集合并分配的内存将无法释放,如果修改后在放入集合在修改在放入会很快用完内存,此为内存泄漏

老师是这样讲的....

评分

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

查看全部评分

回复 使用道具 举报
许冉 黑马帝 2011-10-13 11:05:16
藤椅
本帖最后由 xuan 于 2011-10-13 11:19 编辑

顾名思义,就是内存泄露就是内存减少了,当然这个减少并不是真正的内存大小变了
而是可用内存变小了,可能是由于对象未释放造成的
例如原来系统给程序分配的内存是2M,但是在运行过程中,有些对象已经没用了,但是它所占用的内存并没有被释放,这时候可用内存不就变少了嘛,这就是最简单的内存泄露理解
补充一句:之所以没有被释放,参考楼上楼下的例子

评分

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

查看全部评分

回复 使用道具 举报
朱华 黑马帝 2011-10-13 11:12:16
板凳
纯手打,请区分。很久很久以前,老师说过JAVA不存在内存泄露,因为JAVA与C/C++不同,有着强大垃圾回收机制,只要一个对象不存在访问通路,即该对象在内存中占用了空间,但是不会被访问到,那他就会被垃圾回收器收回,但是后来在往上看东西时候慢慢发现,其实JAVA一样存在内存泄露,只不过这个泄露的范围要比C/C++小,要解释这个还是要引用那个经典的例子(关于这个例子的其他相关解释你可以在网上搜索的到):
  1. Vector v = new Vector();
  2. Object object = new Object();
  3. v.add(object);
  4. o = null;
复制代码
一步步分析这4行代码:
你创建了一个Vector,
然后你在栈中创建了一个引用object ,
又在堆中创建了一个实例new Object()
你将object引用放进了Vector中
然后又将object引用所占的内存释放掉了,o = null这句的本意其实是要释放o这个引用,从而让o连接着的object对象被垃圾回收器回收,但是因为你没清除Vector当中的引用信息,v依旧可以从自己的内部访问到object,所以object不满足垃圾回收机制,所以object的内存不会被释放,这就导致了内存泄露,不知道我说清楚没有。
内存泄露、内存溢出的情况有太多太多。。相信同类的实例网上一搜一大堆,很多都是实际开发中在应用其他开发技术的时候导致的。

评分

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

查看全部评分

回复 使用道具 举报
朱华 发表于 2011-10-13 11:12
纯手打,请区分。很久很久以前,老师说过JAVA不存在内存泄露,因为JAVA与C/C++不同,有着强大垃圾回收机制 ...

请问。如果v=null这个内存不就释放了吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马