zoukankan      html  css  js  c++  java
  • 【Java】【JVM】你必须了解的内存溢出和内存泄漏

    什么是内存溢出和内存泄漏呢?

    • 内存溢出(Out Of Memory —— 也就是常说的OOM)
    系统已经不能再分配出多余的空间给你所使用了。
    
    比如:你从数据库查询出了100M的数据,但是系统只有90M的数据了,boom!!!没那么多内存了,所以就炸了

    • 内存泄漏(Memory Leak)
    在你使用一块资源时,给他分配了一部分空间;当你不再使用了之后,并没有回收它,但是它确实没有用了,就造成了内存泄漏。

    如果内存泄漏次数过多,就容易造成内存溢出。

    • 此外也顺便介绍一下栈溢出(StackOverFlow)

    由于Java中存在虚拟机栈的概念,说白了就是栈空间无法分配多余的空间来使用。

    那么内存溢出的原因都是什么呢?又该如何避免或解决内存溢出呢?

    • 先说下内存溢出的原因?
    1》一次性分配大量数据空间,而导致内存空间不足,比如从数据库一次性查询大量数据
    
    2》JVM中启动参数设置过小
    
    3》集合类中的对象使用完成后未被回收,导致对象内存泄漏过多而产生内存溢出
    
    4》使用第三方软件包可能会出现不熟悉的BUG等
    
    5》方法递归,死循环,从而容易导致栈内存溢出
    • 如何避免内存溢出呢?
    1》在JVM启动前,预估好内存分配空间大小设置
    
    2》检查循环是否有重复产生大量新对象实体
    
    3》检查List、Map等集合框架是否有引用的对象在使用后,并没有被回收
    
    4》检查代码中是否有递归调用或死循环操作
  • 相关阅读:
    手机截屏雷阵雨
    2010年5月20日 用户的数据永远不会靠谱
    2010年5月17日 OCD
    2010年8月9日 流水账
    2010年5月19日 借鉴
    立表为据
    2010年6月2日 回来
    不重视小C打屁屁
    2010年8月16日 知行合一
    2010年5月18日 小细节大隐患
  • 原文地址:https://www.cnblogs.com/boluopabo/p/13068073.html
Copyright © 2011-2022 走看看