内存溢出与内存泄漏

来源:互联网 发布:php socket了解 编辑:程序博客网 时间:2024/06/02 03:24

最近看java虚拟机,看见内存溢出与内存泄漏两种错误。一直不太清楚区别。特记录一下

1.内存溢出
内存溢出(out of memory),指的是在程序申请内存时,没有足够的空间可以给你用。比如你想存一个long的数,但是内存只有int的大小,你去存了就会报out of memory的异常。

2.内存泄漏
内存泄漏指的是给了你申请了一片内存,但是却没有释放。但是却没有了指向了这片内存的指针,所有系统和你都没有办法在使用这片内存,就发生了内存泄漏。

以下来自百度百科:
以发生的方式来分类,内存泄漏可以分为4类:
- 常发性
发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
- 偶发性
发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
- 一次性
发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
- 隐式
程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天、几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

0 0
原创粉丝点击