还不懂 OOM ?详解内存溢出与内存泄漏区别!

news2024/9/28 9:26:44

在这里插入图片描述

内存溢出与内存泄漏

1. 内存溢出(Out Of Memory,OOM)

概念:

内存溢出是指程序在运行过程中,尝试申请的内存超过了系统所能提供的最大内存限制,并且垃圾收集器也无法提供更多的内存,导致程序无法正常运行。

原因:

  • 程序分配的内存过大: 处理超大文件、加载大量数据等操作,可能会导致内存需求超过系统限制。
    • 比如你申请了一个 Integer 的变量,但是给了它一个 Long 类型才能存下的数,那就是内存溢出
  • 内存泄漏: 长期积累的内存泄漏,会逐步消耗系统内存,最终导致内存溢出。
  • 系统内存不足: 系统本身的内存容量有限,当运行多个程序或大型程序时,可能会出现内存不足的情况。

2. 内存泄漏(Memory Leak)

概念:

内存泄漏是指程序在在申请内存后,无法释放已申请的内存空间,一次内存泄漏的危害可以忽略,但内存泄漏堆积后果会很严重,无论有多少内存,都迟早会被占光。

原因:

  • 静态集合类引起的内存泄漏

    • 使用 HashMapVector 等静态集合时,容易出现内存泄漏。这些静态变量的生命周期与应用程序一致,因此容器中的对象在程序结束之前将不能被释放。简单来说,长生命周期的对象持有短生命周期对象的引用,尽管短生命周期的对象不再使用,但由于长生命周期对象持有它的引用,导致不能被回收。
    • 单例模式,一般单例的对象都会设置为静态的,单例的生命周期和应用程序一样长,所以单例程序中,如果持有对外部对象的引用的话(这个外部对象只在某一小段时间使用,生命周期本该很短),那么这个外部对象是不能被回收的,则会导致内存泄漏的产生
    • 解决方法:静态引用时注意将应用对象置空或少用静态引用。
  • 资源未关闭或释放导致的内存泄漏

    • 在程序中创建或打开流、新建网络连接等时,JVM 会为这些资源分配内存做缓存。如果忘记关闭这些资源,会阻塞内存,导致垃圾回收无法进行清理。特别是当程序发生异常时,没有在 finally 中进行资源关闭的情况。
    • 解决方法:在资源使用完毕后,务必在 finally 块中关闭资源。
  • 不正确的 equals()hashCode()

    • HashMapHashSet 这种集合中,经常用到 equals()hashCode() 来比较对象。如果重写不合理,会成为潜在的内存泄漏问题。
    • 解决方法:重写 equals()hashCode() 方法,确保正确比较对象。¹²

3. 总结

  • 内存溢出是指内存不够用,而内存泄漏是指内存被占用无法释放。
  • 内存泄漏会导致内存溢出!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出Ansiable

目录 Ansible的起源 Ansible的发展史 Ansible的功能 Ansible的特性 Ansible的架构 Ansible的注意事项 Ansible入门 Ansible的安装 Ansible配置文件 配置文件解析 inventory主机配置清单 Ansible相关工具 Ansible的常用模块 Command模块 shell模块 Script模块 C…

Windows 电脑查看 WiFi 密码的方法都有哪些?

从设置面板中查看 当你使用的是笔记本电脑并且连接 WiFi 之后可以在设置面板中查看 WiFi 密码,首先打开设置界面,然后点击网络和 Internet,找到 WiFi 之后点击进入,然后点击管理已知网络。 然后点击已经连接好的无线网络。 进入之…

快速导入mysql百万用户数据

1. 前言 随着互联网的发展,大数据已经是很普遍的一个现象,已不再是零几年时的神话。数据资源意为着就是信息资源,很好的使用起来说是财富资源一点也不夸张.所以无论当下是小的还是大的互联网公司都会遇到大数的情况。只不过不同的业务逻辑需求与使用情况不一样罢了。 大数据我…

git为文件添加可执行权限

查看文件权限 git ls-files --stage .\SecretFinder.py100644 表示文件的所有者有读取和写入权限 添加可执行权限 git update-index --chmod x .\SecretFinder.py再次查看文件权限 git ls-files --stage .\SecretFinder.py100755 表示文件的所有者有读取、写入和执行权限

安卓逆向经典案例——XX优品(uniapp)

uni-app逆向 uniapp的目录结构 有一个io文件夹,下面有dcloud uniapp UniApp 可以用于开发 H5 应用,但它不仅仅局限于 H5 应用。UniApp 的特点包括: 1. 跨平台:可以一套代码同时生成适用于多个平台(如 iOS、Android、…

STM32杂交版(HAL库、音乐盒、闹钟、点阵屏、温湿度)

一、设计描述 本设计精心构建了一个以STM32MP157A高性能单片机为核心控制单元的综合性嵌入式系统。该系统巧妙融合了蜂鸣器、数码管显示器、点阵屏、温湿度传感器、LED指示灯以及按键等多种外设模块,形成了一个功能丰富、操作便捷的杂交版智能设备。通过串口…

Linux C语言基础 day9

目录 思维导图 学习目标: 学习内容: 1. 值传递与地址传递(非常重要) 1.1 值传递 1.2 地址传递 2. 递归函数 2.1 递归的概念 2.2 递归条件 2.3 递归思想 3. 指针 3.1 指针相关概念 3.2 指针变量的定义 3.2.1. 定义格…

初识MVVM分层思想——05

1.MVVM是什么? M :model(模型/数据) V : view(试图) VM :ViewModel (试图模型) : VM 是MVVM 中的核心部分。(它起到一个核心的非常重要的作用&…

mac下mysql无法登陆的问题

用如下命令登录出现错误。 sudo mysql.server start解决方案 使用如下命令登录 sudo /usr/local/MySQL/support-files/mysql.server start

【C++基础】初识C++(1)

目录 一、认识C 1.1 C 相关概念 1.2 C的发展 1.3 C的关键字 1.4 第一个程序 二、命名空间 2.1 namespace的定义 2.2 命名空间的使用 三、C输入和输出 四、缺省函数 五、函数重载 一、认识C 1.1 C 相关概念 1983年,Bjarne Stroustrup在C语⾔的基础上…

Python 视频的色彩转换

这篇教学会介绍使用OpenCV 的cvtcolor() 方法,将视频的色彩模型从RGB 转换为灰阶、HLS、HSV...等。 因为程式中的OpenCV 会需要使用镜头或GPU,所以请使用本机环境( 参考:使用Python 虚拟环境) 或使用Anaconda Jupyter 进行实作( 参考&#x…

BMS电池管理系统 — 1 什么是BMS

目录 1 储能系统组成 1.1 储能电池结构 1.2 储能集装箱组成 2 BMS系统组成 3 BMS功能 3.1 SOC荷电状态估计 3.2 SOH估计 3.3 主动均衡与被动均衡 3.4 电池热管理 4 BMS架构 4.1 集中式BMS 4.2 分布式BMS 参考论文 1 储能系统组成 1.1 储能电池结构 电芯&#xf…

docker(六)--创建镜像

六、创建镜像 1.创建镜像两种方式 方式1: 更新镜像 docker commit 方式2:构建镜像 docker build 2.更新镜像 1)用法 docker commit -m“描述信息” -a作者 容器id或者容器名 镜像名:tag 2)步骤 ①根据镜像运行容器 ②进入容…

PHP将两张图片合成一张图片代码实例(源代码)

使用PHP将两张图片合成一张图片可以通过GD库来实现。下面是一个示例代码,展示如何将两张图片合成一张图片: 加载两张图片。获取每张图片的宽度和高度。创建一个新的空白图片,其宽度是两张图片宽度的和,高度是两张图片中较大的高度…

酒店民宿小程序:酒店民宿便利预订,提高收益!

在旅游业发展旺盛时期,酒店民宿也得到了快速发展。随着移动互联网的发展,人们逐渐在手机上预订酒店民宿,这给酒店民宿小程序的发展提供了用户基础,为大众出行带来了更多的便利。 酒店民宿小程序是一个基于微信平台的应用程序&…

PHP计件工资系统小程序源码

解锁高效管理新姿势!全面了解计件工资系统 🔥 开篇:为什么计件工资系统成为企业新宠? 在这个效率至上的时代,企业如何精准激励员工,提升生产力成为了一大挑战。计件工资系统应运而生,它以其公…

Python大数据分析——K近邻模型(KNN)

Python大数据分析——K近邻模型 数学部分模型思想模型步骤距离度量指标欧氏距离曼哈顿距离余弦相似度 K值选择 代码部分函数示例1——知识掌握程度示例2——预测发电量 数学部分 模型思想 如图所示,模型的本质就是寻找k个最近样本,然后基于最近样本做“…

qml 实现一个带动画的switch 按钮

一.效果图 》 二.qml 代码 import QtQuick 2.12 import QtQuick.Controls 2.12Switch {id: controlimplicitWidth: 42implicitHeight: 20indicator: Rectangle {id: bkRectangleanchors.fill: parentx: control.leftPaddingy: parent.height / 2 - height / 2radius: height …

C语言有哪些特点?

C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的…

Linux系统日志管理服务和配置

文章目录 Linux系统日志服务rsyslog日志分类rsyslog相关文件/var/log/message重启失败分析 /var/log/secure自定义日志输出路径1.修改sshd_config配置文件2.修改rsyslog.conf3.重启服务 常见日志文件日志管理工具journalctl选项说明journalctl用法示例 日志分析实战host无法解析…