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

在这里插入图片描述

内存溢出与内存泄漏

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

概念:

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

原因:

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

2. 内存泄漏(Memory Leak)

概念:

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

原因:

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

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

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

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

3. 总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++] 模拟实现list(二)

标题:[C] 模拟实现list(二) 水墨不写bug 目录 (一)回顾 (二)迭代器类的封装设计 (1)成员函数简要分析 (2)const迭代器类的设计 (…

Nginx上配置多个网站

一、需求描述 我们只有一台安装了Nginx的服务器,但是我们需要实现在这台服务器上部署多个网站,用以对外提供服务。 二、Nginx上配置多个网站分析 一般网站的格式为:【http://ip地址:端口号/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要实现在Nginx…

在Linux上搭建服务器之综合实验(web,dns,防火墙,SELinux)

其实验简图如下: 解读: 本实验需要完成4部分内容,web服务器的搭建,主从dns服务器的搭建,防火墙的开启,以及SELinux设置为强制模式。 首先dns主服务器上配置web服务(其中我本机的IP为192.168.5.…

docker安装及部署本地项目命令示例-【window及linux通用安装】

文章目录 安装部署本地项目的相关命令(本地项目可以是大模型,算法,软件开发等)其他相关命令 安装 windows教程 注:上面链接中,安装docker可以默认C盘等。登录docker destop即使报错也可使用cmd命令窗口 linux教程 注:…

第三方配件也能适配苹果了,iOS 18与iPadOS 18将支持快速配对

苹果公司以其对用户体验的不懈追求和对创新技术的不断探索而闻名。随着iOS 18和iPadOS 18的发布,苹果再次证明了其在移动操作系统领域的领先地位。 最新系统版本中的一项引人注目的功能,便是对蓝牙和Wi-Fi配件的配对方式进行了重大改进,不仅…

OS_同步与互斥

2024-07-04:操作系统同步与互斥学习笔记 第9节 同步与互斥 9.1 同步互斥的基本概念9.1.1 同步关系9.1.2 互斥关系9.1.3 临界资源9.1.4 临界区9.1.5 同步机制应遵循规则 9.2 软件同步机制9.2.1 单标志法9.2.2 双标志先检查法9.2.3 双标志后检查法9.2.4 peterson算法 …

Rust代码优化的九大技巧

一.使用 Cargo 内置的性能分析工具 描述:Cargo 是 Rust 的包管理器,带有内置工具来分析代码性能,以识别性能瓶颈。 解释: 发布模式:在发布模式下编译启用优化,可以显著提高性能。 cargo build --release基…

匠芯创汽车电子方案应用

汽车电子是指应用于汽车中的各种电子技术、电子设备和电子控制系统。它覆盖了车辆的信息娱乐系统、车辆控制系统、车辆通讯系统等多个方面。汽车电子通过增强车辆的性能、安全和乘坐体验,成为现代汽车设计和制造中不可或缺的一部分。 匠芯创ArtInChip应用芯片&#…

什么是敏捷本地化

快速、敏捷的多语言产品和服务交付正逐渐成为众多行业的常态。在这种情况下,重点从传统的期望(即在合理的时间框架内翻译大量内容)转变为翻译工作量非常大的小片段,通常在2-3到12-24小时之间,通常在周末或假期。 Logr…

海狐外卖O2O商城系统:技术架构与运营模式的深度解析

摘要: 本文深入探讨了海狐外卖O2O商城系统的技术架构、功能特性以及运营模式。海狐外卖作为一款专注于细分市场领域的外卖餐饮解决方案,不仅拥有先进的技术栈支持,还通过丰富的系统插件和灵活的运营模式,为商户和用户提供高效、便…

构建未来对话:从零开始实现基于Vue 3的AI聊天页面

大家好,今天我们将一起探索如何从零开始,使用Vue 3构建一个AI对话页面。这个过程不仅会让我们了解Vue 3的新特性,还会让我们对构建交互式Web应用有一个全新的认识。如果你是编程新手,别担心,我会用通俗易懂的语言&…

AI大模型API:开启智能应用的新纪元

AI大模型API是当今技术领域的重要突破,它们以其卓越的性能和强大的计算能力引领着人工智能的发展。这些API不仅仅是一种技术工具,更是推动智能化时代的核心驱动力。通过AI大模型类API,我们可以利用先进的算法和深度学习模型,实现各…

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解,具体思路是,对于一个长度大于2的子串&…

Python爬虫教程第5篇-使用BeautifulSoup查找html元素几种常用方法

文章目录 简介find()和find_all()字符串通过id查找通过属性查找通过.方式查找通过CSS选择器查找通过xpath查找正则表达自定义方法总结 简介 上一篇详细的介绍了如何使用Beautiful Soup的使用方法,但是最常用的还是如何解析html元素,这里再汇总介绍下查询…

Sprint Boot 2 核心功能(一)

核心功能 1、配置文件 application.properties 同基础入门篇的application.properties用法一样 Spring Boot 2 入门基础 application.yaml(或application.yml) 基本语法 key: value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允…

Doze和AppStandby白名单配置方法和说明

机制 配置路径 配置案例 说明 影响机制 调试命令 Doze /platform/frameworks/base /data/etc/platform.xml allow-in-power-save 【系统应用Doze白名单配置】 Doze\Job\AppStandby\Alarm\WakeLock\Sync 查看Doze白名单:adb shell dumpsys deviceidle 添加Doze白名单…

系统服务综合实验

实验需求: 现有主机 node01 和 node02,完成如下需求: 在 node01 主机上提供 DNS 和 WEB 服务dns 服务提供本实验所有主机名解析web服务提供 www.rhce.com 虚拟主机该虚拟主机的documentroot目录在 /nfs/rhce 目录该目录由 node02 主机提供的…

Mocreak:一键自动化部署Microsoft Office,高效办公必备

Mocreak是一款用于自动化下载、安装和部署 Microsoft Office 的办公增强工具。这款软件完全免费、无GG、绿色、无毒,并且具备简约、高效和安全的特点。它支持一键快速下载、安装和部署最新版的 Microsoft Office 软件,并提供了一个简约且可自定义的图形界…

xcode项目添加README.md文件并进行编辑

想要给xcode项目添加README.md文件其实还是比较简单的,但是对于不熟悉xcode这个工具的人来讲,还是有些陌生,下面简单给大家讲一下流程。 选择“文件”>“新建”>“文件”,在其他(滚动到工作表底部)下…

2022 RoboCom省赛题目解析

题目解析&#xff1a;这就是一题很简单的模拟&#xff0c;直接上代码&#xff1b; #include<iostream> using namespace std; const int N 10010; int arr[N]; int main() {int n , m;cin >> n >> m;int sum 0;int res 0;for(int i 0; i < n;i ) cin…