美文网首页
内存泄漏还是溢出,你分的清楚吗?

内存泄漏还是溢出,你分的清楚吗?

作者: 最爱西红柿 | 来源:发表于2019-11-24 18:07 被阅读0次

    内存是外存与CPU间的桥梁,用于暂时存放CPU中的运算数据,以及与硬盘外部存储器交换的数据。

    如手机内存,又分运行内存和存储内存。如我们平时看到的6+64G,前者6G指的是运行内存,在应用程序运行时产生数据临时存储,当关机及重启后,这部分内存消失;后者64G指存储内存,如下载电影、歌曲都可存放在其中。当然这两块内存,都不是完全空的,系统程序本身会占用部分。

    一、内存溢出是什么?

    内存泄漏(Memory Leak)大白话讲就是程序申请的运行内存,用完后本应该被GC回收,却未能被释放,一直占用该内存单元,导致其他程序也不能使用它。

    二、内存溢出是什么?

    内存溢出(Out Of Memory)是指程序向系统申请的空间超过系统能够给予的

    PS:如只能提供5人座的车,你却要大巴(看到的例子,很形象)

    三、内存泄漏与内存溢出之间有何关系?

    大量的内存泄漏会导致内存溢出

    四、内存泄漏原理

    这里讲一下JVM虚拟机,它是管理、分配内存的;主要介绍栈、堆、方法区。

    栈(stack)是先进后出,只存放java的基本数据类型和对象引用(方法执行时占用内存,方法结束后释放,不会导致内存泄漏)

    堆(heap)存放由new创建的对象和数组,并由GC(Garbage Collection)回收。(如果GC回收不了,会导致内存泄漏)

    方法区(Method)存放静态变量static、常量,在程序运行整个过程都占用内存,程序结束后由系统释放。

    如静态变量,生命周期长,但其他地方引用了这个变量,也就不能被回收导致内存泄漏。

    五、如何测试内存泄漏

    可以利用AndriodStudio里的Minitor插件, 选择手机设备及待测软件包名(查看软件包名:adb shell dumpsys activity | find "mFocusedActivity),然后运行待测的软件的指定测试模块。通过进入和离开待测模块,可观察内存的变化。

    *图片截于网络

    六、GC什么时候工作或自动回收?

    内存可以由GC回收,也可手动触发回收。程序想要分配的内存大于当前可用的内存会触发自动回收机制。

    七、哪些可能会导致内存泄漏?

    *图片截于网络

    PS:参考文章

    https://blog.csdn.net/m0_37108482/article/details/80841689(AS安装、配置)

    https://www.cnblogs.com/oreox/p/10662066.html(手机如何连接AS)

    https://www.douban.com/group/topic/143573617/?type=rec(导致内存泄漏的事件)

    相关文章

      网友评论

          本文标题:内存泄漏还是溢出,你分的清楚吗?

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