美文网首页Android开发Android知识程序员
简单说一说内存泄漏、内存溢出、内存碎片。

简单说一说内存泄漏、内存溢出、内存碎片。

作者: 小鹿啊小鹿 | 来源:发表于2017-12-25 13:39 被阅读0次

    内存泄漏:

    原因:

    在内存中供用户使用的内存区有三个:
    程序存储区、
    静态存储区、
    动态存储区。

    程序的数据一般存放在静态存储区和动态存储区。

    静态存储区是当程序开始的时候就分配好的一块固定的内存区。

    动态存储区一般是在程序运行过程中根据需要动态去分配和释放的内存区域。这块内存区域需要开发人员在使用完毕之后进行释放,如果没有释放动态分配的内存区域就会造成内存泄漏。相应的这块区域也不能够被使用。

    简单来说,就是你使用了一块内存区域,但是却没有释放,那么这块内存区域谁都用不了了,这就是内存泄漏。

    内存溢出

    原因:
    当一个程序向系统申请的所需内存大于系统可提供使用的内存时,这个时候就会产生内存溢出。

    举个例子:有一个可以装50ml水的空杯子,但是你非得向这个被子里面倒了100ml水,那么这个时候多余的水肯定会流出来,这就是水溢出了。那么放到内存来讲,就是内存溢出。

    另外,内存泄漏积累到一定程度,会占用很多内存资源,从而导致内存溢出。

    内存碎片

    内存碎片分为外部碎片和内部碎片

    外部碎片:

    外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

    原因:

    外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。

    内部碎片:

    内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的
    空间;

    原因:

    内部碎片是处于内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。

    相关文章

      网友评论

        本文标题:简单说一说内存泄漏、内存溢出、内存碎片。

        本文链接:https://www.haomeiwen.com/subject/jvhlgxtx.html