前言:借鉴学习+自我理解。若是有不恰当的地方,希望大家可以不吝赐教。
--------------------------------------------------------------------------------------------------------------------------------------------------------
内存溢出( out of memory):是指程序在申请内存时,没有足够的内存空间供其使用(也可以理解我们 要求分配的内存超出了系统能给的,系统不能满足需求 ),所以出现out of memory;比如系统只能存放integer的空间,而你却申请了存放long,于是引起内存溢出 。
--------------------------------------------------------------------------------------------------------------------------------------------------------
内存溢出( out of memory):是指程序在申请内存时,没有足够的内存空间供其使用(也可以理解我们 要求分配的内存超出了系统能给的,系统不能满足需求 ),所以出现out of memory;比如系统只能存放integer的空间,而你却申请了存放long,于是引起内存溢出 。
打个比方:一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。
内存泄露(memory leak):向系统申请分配内存时使用(new),但是使用完后不归还(delete),使得申请到的那块内存你自己也不能再访问了(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。
打个比方:向朋友借了一支笔,用后却没有归还(也许你不知道把它丢哪了),导致朋友以后都不能再把这支笔借给有需要的人了。
以发生的方式来分类,内存泄漏可以分为4 类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次