• 内存泄露


    一、概念

        1、 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不能再使用的内存的情况。简言之:分配出去的内存无法回收。

        2、内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

        3、 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。

            应用程序一般使用malloc,calloc,realloc等函数(C++中使用new操作符)从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说

    这块内存泄漏了。

    二、后果

       内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。

    三、JAVA中的内存泄露

    我当时碰到这个问题时,很纳闷:JAVA不是自己管理内存吗,怎么也会有内存泄露的问题了?持有对无用对象的引用!!!

    我们知道,java的垃圾回收机制实现的就是:对于没有被引用的对象是可以回收的。所以你要造成内存泄露就要做到:持有对无用对象的引用!这样垃圾回收机制无法回收这一片内存,就造成了内存泄露。

    不要以为这个很轻易做到,既然无用,你怎么还会持有它的引用? 既然你还持有它,它怎么会是无用的呢?

    举个例子:

    假如堆栈加了10个元素,然后全部弹出来,虽然堆栈是空的,没有我们要的东西,但是这是个对象是无法回收的,这个才符合了内存泄露的两个条件:无用,无法回收。

    参考:http://zhidao.baidu.com/question/314526455.html

    四、oc中的内存泄露

    例子:-(void) leakArray{

                   NSArray *leakArray = [[NSMutableArray alloc]init];

                   leakArray = nil;

              }这个方法就会造成内存泄露,泄露一个32B的NSArray。因为我们还没有释放他,他就变成无效引用了。但是在JAVA中,这样不会。

  • 相关阅读:
    xadmin 安装
    Python
    使用免费证书安装 ipa 到真机
    Jupyter PPT
    Javascript注意点
    论文哪里找?
    神经网络术语
    PyTorch上路
    DCGAN实现
    数据库和数据挖掘领域的会议和期刊
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/3040855.html
Copyright © 2020-2023  润新知