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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何小红 中级黑马   /  2012-10-2 20:57  /  1588 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何小红 于 2012-10-5 20:20 编辑

内存溢出与内存泄漏,在网上查了一下,知道大概,理解不深,有谁能帮忙一下?
还有如何避免内存溢出与泄漏?
有关内存的东西,说得越多越深越好,谢谢!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 很给力!

查看全部评分

2 个回复

正序浏览
内存泄露和内存溢出的区别:

内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出(像二楼说的那样)。


Java内存泄漏就是没有及时清理内存垃圾(就是delete),导致系统无法再给你提供内存资源(内存资源耗尽)。


看到上面的解释,可能有些朋友还是不太理解吧。没问题,看以下例子


1.Java内存泄露是说程序逻辑问题,造成申请的内存无法释放.这样的话无论多少内存,早晚都会被占用光的.
最简单的例子就是死循环了.由于程序判断错误导经常发生此事


2.Java内存泄漏是指在堆上分配的内存没有被释放,从而失去对其控制。这样会造成程序能使用的内存越来越少,导致系统运行速度减慢,严重情况会使程序当掉。


3.关于内存溢出有点出入。比如说你申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
举个现实中的例子:


比如有一个桶,装满了水.你丢个苹果进去。桶的水正常。如果你放个大石头。水就出溢出,内存溢出也就是这个原理。


区别:内存溢出,提供的内存不够;Java内存泄漏,无法再提供内存资源

建议楼主去看看java是怎么管理内存的原理比较好点

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 应广驰 于 2012-10-2 21:09 编辑

内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出, 这个概念很明显,就是字面上的意思,内存装不下了,就溢出了


内存泄漏指你用new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态,这个问题基本上都是C上面的,因为java又垃圾自动处理机制,没用的内存空间会被自动释放掉,当然了,这个解决也不是万能的,毕竟是机器自动判断,有一个依据。一句两句说不清楚。要想真的弄清楚可以看看书或者百度一下

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

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