黑马程序员技术交流社区

标题: 内存溢出与内存泄漏 [打印本页]

作者: 何小红    时间: 2012-10-2 20:57
标题: 内存溢出与内存泄漏
本帖最后由 何小红 于 2012-10-5 20:20 编辑

内存溢出与内存泄漏,在网上查了一下,知道大概,理解不深,有谁能帮忙一下?
还有如何避免内存溢出与泄漏?
有关内存的东西,说得越多越深越好,谢谢!
作者: 广驰    时间: 2012-10-2 21:05
本帖最后由 应广驰 于 2012-10-2 21:09 编辑

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


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

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


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


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


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


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


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


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


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

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






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