美文网首页
一、内存溢出(oom)和内存泄漏(leak)

一、内存溢出(oom)和内存泄漏(leak)

作者: 忘忧崖主 | 来源:发表于2020-07-08 00:09 被阅读0次

        内存溢出(OOM),指程序申请内存时,没有足够的内存供申请者使用,此时就会报错OOM,即所谓的内存溢出。 

        内存泄漏(Memory Leak),指程序在申请内存后,内存无法被JVM/操作系统回收的现象。内存泄漏累积到一定程度之后会导致内存溢出。

        造成内存溢出的原因有很多种,比如:


            1.启动参数内存值设定的过小;

            2.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

            3.代码中存在死循环或循环产生过多重复的对象实体;

            4.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收(内存泄漏);


        针对上述1~3条原因,平常保持良好的编码习惯以及采取一定的措施,一般来说可以很好的规避,比如:

            1、修改JVM启动参数,直接增加内存;(-Xms,-Xmx参数)

            2、避免一次性查询全部记录或者过多记录,最好采取分页的形式查询

            3、在编码过程中尽量避免写死循环或递归调用,除非业务需要,也要做到心知肚明


        针对第4点,其实从代码上我们可以做一些相关的检查,比如检查List、Map等集合对象是否有未及时清除的问题,因为List、Map等集合中会始终存有对对象的引用,使得这些对象不能被GC回收;但往往实际情况是:代码中使用List、Map的地方太多,没办法逐一排查,或者是做了排查但有遗漏;甚至还有工期紧、上线急、没时间去排查代码或者是当局者迷无法自我发现等等各种原因,总之检查代码的方式很难做到完全规避内存泄漏的问题。

        那么有没有什么好的办法能够把第4点的问题完全规避呢?答案是:没有。即使你在上线前做了充分的性能和压力测试,也不一定能完全暴露问题。所以,带着问题上线不可避免,这也是业界的一个常态。

        关键是有没有什么好的方式可以及时发现线上环境存在的内存泄漏问题,以及及时定位到问题代码呢,这将是我后面2篇文章要讲的内容,请大家敬请期待~

        以上为个人的一些思考与总结,难免会有纰漏,如有不足之处,欢迎指正!

相关文章

  • 【Android测试】内存泄漏检测 LeakCanary

    什么是内存泄漏和内存溢出?内存泄漏有什么危害?LeakCanary检测内存泄漏? 内存泄漏(Memory Leak...

  • 关于Android中内存溢出分析

    OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能...

  • 【JVM】内存溢出分析

    一 内存溢出概述 都有发生内存溢出异常(OutOfMemoryError,简称OOM)的可能。 内存溢出和内存泄漏...

  • 一、内存溢出(oom)和内存泄漏(leak)

    内存溢出(OOM),指程序申请内存时,没有足够的内存供申请者使用,此时就会报错OOM,即所谓的内存溢出。 ...

  • 2022-03-29

    一::内存溢出(out of memory)和内存泄漏(memory leak)的区别内存溢出:应用所需要的内存超...

  • Android内存泄漏和内存溢出详解

    什么是内存泄漏和内存溢出 内存泄漏(Memory Leak):指的是程序在申请内存空间之后,无法释放已占有的空间,...

  • 内存泄漏

    内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别1)内存泄漏例如:new了一块...

  • 11.2-1 Bitmap2 OOM

    简介 Out Of Memory(内存溢出):占用内存超出系统分配内存; memory leak(内存泄漏):占用...

  • 面试题-第一期

    内存泄漏&&内存溢出 参考博客参考博客 先来看看内存泄漏,内存溢出,OOM,GC回收这几个概念。把App的堆内存空...

  • Android OOM之内存泄漏详解

    OOM(OutOfMemory)就是我们平时所碰到的内存溢出,而内存泄漏的最终后果就是导致OOM。内存泄漏是造成应...

网友评论

      本文标题:一、内存溢出(oom)和内存泄漏(leak)

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