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》检查代码中是否有递归调用或死循环操作
  • 相关阅读:
    项目编译
    sqlserver查列名
    list<>初始化赋值两种方式
    看到一句很不错的话
    typescript
    vscode里div等html标签代码补全
    JavaScript 基于原型链的继承
    大数据系列01:大数据离线计算平台hadoop集群搭建和本地环境配置实践
    java数据类型
    计算机基础及java基础
  • 原文地址:https://www.cnblogs.com/boluopabo/p/13068073.html
Copyright © 2011-2022 走看看