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》检查代码中是否有递归调用或死循环操作
  • 相关阅读:
    股票投资
    知道复利终值求本金
    复利计算和单利计算
    实验0:了解和熟悉操作系统
    0909我的编译原理感
    递归下降分析法
    有(很)穷的自动机
    评论
    C语言文法阅读与理解序
    C语言文法阅读与理解
  • 原文地址:https://www.cnblogs.com/boluopabo/p/13068073.html
Copyright © 2011-2022 走看看