【内存泄漏和内存溢出】JavaScript之深入浅出理解内存泄漏和内存溢出

news/2024/11/6 14:00:46/文章来源:https://www.cnblogs.com/chinasoft/p/18530027

https://blog.csdn.net/qq_44291585/article/details/122026034

 

内存泄漏和内存溢出
了解内存泄露和内存溢出之前,我们得知道什么是内存!下面就会详细讲解什么内存

什么是内存
内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。

内存的运行也决定计算机整体运行快慢的程度。

内存条由内存芯片、电路板、金手指等部分组成。

在项目中我们打开任务管理器=>性能,这里就有我们内存的使用情况


内存泄漏和内存溢出
内存是用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。既然是用来存储数据那么就会出现内存泄漏和内存溢出的情况!可能大家会觉得泄漏和溢出不是一样的吗🤣接下来就会详细讲解什么是内存泄漏,什么是内存溢出,以及他们的区别

内存溢出
内存溢出(out of memory):一种程序运行出现的错误。当程序运行需要的内存超过剩余的内存时,就会抛出内存溢出的错误。当我们定义一个变量时,程序会给他对应的内存。当然程序分配的内存是由极限的,当我们不停为变量不停的不停的给它添加数据,就会超出这个极限。于是程序就会崩溃,我们称这个过程到结果叫内存溢出

如下,我们有一个杯子,里面有一些水,我们一直往杯子里倒水,会出现什么情况呢🤔没错,会出现水会从杯子里面溢出来,如下下图一样。当我们做出把水倒出杯子,被家长看到,家长就会告诉你们这是错误的行为,严重的可能还会打你一顿。

 

上面举了一个例子,下面上代码,让我们看看什么是内存溢出吧🧐

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">

</style>
</head>
<body>
你好
<script type="text/javascript">
var obj=[]
</script>
</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
这是我们定义了变量obj,给obj分配了空间,obj并没有数据,这个时候我们运行代码是正常的,如下:

当我们疯狂的obj添加数据,如下:

for(let i=0;i<10000;i++){
obj.push(new Array(1000000))
}
1
2
3
这个时候页面就崩溃了,变成下面这样子了

这就是内存溢出导致我们的程序报错,崩溃了!

内存泄漏
内存泄漏:占用的内存没有及时释放,内存泄漏积累得多了就会导致容易内存溢出。当我们定义一个全局变量时,系统就会给这个变量分配内存,然而这个变量,一直占用了一个块地方,没有让出地盘,这种情况我们称它为内存泄漏

如下这是我们平时的内存4.3G:

接下来,看一下我们使用了全局变量没有释放资源会怎么样🤔
代码如下:

window.abc=10
console.log(window.abc)
1
2
如下,我们清晰的看到内存比刚刚多了0.3G,这就是内存泄漏

我们在看看释放资源会发生什么呢🤔

window.abc=null
1
过了一会内存又变少了要变回平时的样子


到了这里就可以总结一下了,内存溢出和内存泄露的区别了

总结
内存泄漏指的是占用的内存没有及时的释放

内存溢出指的是需要的内存超过剩余的内存

内存泄漏不一定会内存溢出,但是内存泄漏过多就会造成内存溢出
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_44291585/article/details/122026034

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据科学在京东物流关键角色与前沿应用探索

作者:京东物流 何平小编之所以选择这个话题,是希望帮助大家更全面地理解数据科学的概念。数据科学是一个广泛而深刻的领域,不仅仅是数据分析、机器学习或大模型的代名词。它的核心在于如何更有效地挖掘数据背后的价值,将数据转化为业务驱动力。最终,通过数据科学实现成本优…

企业老板的最爱,KPI 数据大屏全屏监控企业经营数据目标达成

「KPI目标管理」,新增「目标数据大屏」,可视化追踪目标进度,老板最喜欢的目标数据追踪大屏,够炫酷! 应用场景 在企业管理中,每个人都面临着监控目标执行情况和管理团队的挑战。 每个人需要实时了解目标的落地情况、风险因素以及团队成员的贡献度,但传统的管理方式往往:…

IBM SPSS Amos 28下载与安装教程

1、安装包Amos28: 链接:https://pan.quark.cn/s/0f9dcffd2b38 提取码:Z18Q 2、安装教程 1) 双击安装,弹窗安装对话框2) 点击下一步,选择I accept ,点击Next3) 选择安装路径,建议安装C盘之外,选择完,点击Next4) 点击Install 开始安装5) …

Meta AR 眼镜团队前负责人加入 OpenAI;visionOS 2.2 Beta 引入超宽屏投屏模式丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement)领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的数据」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑的…

newstarctf WP存档

Week 1 Pwn Real Login Game Overwrite Gdb Reverse Web Crypto Misc Week 2 Pwn Reverse Web Crypto Misc Week 3 Pwn 不思議なscanf One Last B1te ezcanary Easy_Shellcode Reverse 011vm simpleAndroid SMc_math flowering_shrubs SecertsOfKawaii PangBai 过家家(3) 取啥…

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒

近日,东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞,恶意行为者可能会利用这些漏洞执行各种操作,包括拒绝服务、模型中毒和模型盗窃。知名网络安全专家、东方联盟创始人郭盛华表示:“总的来说,这些漏洞可能允许攻击者通过单个 HTTP 请求执行…

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!前言 程序员的终极追求是什么?当系统流量大增,用户体验却丝滑依旧?没错!然而,在大量文件传输、数据传递的场景中,传统的“数据搬运”却拖慢了性能。为了解决这一痛点,Linux 推出了 零拷贝 技术,让数据高效传输几乎无需…

【日记】碰到了一个洗钱嫌疑很高的客户(755 字)

正文早上有个客户来开户,总感觉他洗钱的嫌疑很高。1. 没有财务章,甚至没有财务职位,会计工作是找的代理记账公司;2. 客户经理尽职调查时,注册地和实际经营地址不一致,3. 开企业网银觉得还不够,说外勤多,要开手机网银;4. 觉得每天 20 笔,总额 100 万的限额有些低;5. …

C++ 逆向之 forward 函数与完美转发

在进行 std::forward 函数的讲解之前,需要知道 std::move 的运行原理,还不是很清楚的朋友建议先看一下前置知识,本次内容是基于 std::move 内容的基础上进行讲解: C++ 逆向之 move 函数 然后来讲解我们今天的主角:std::forward 函数与完美转发。 一、std::forward 函数的作…

中电金信:企业数据赋能效果差,科学试错体系了解一下?

​ Wuhu,咨询专题第五期内容来啦~ 继先后讲解了企业数字化转型 过程中的价值创造、运营变革 以及平台化建设等难题如何解决后本期我们一起来关注 企业科学试错体系构建事情是这样的 👇 👇 👇 随着金融数字化转型的深入推进,以大数据为基础的智能化应用大量涌现,使得数…

【华为笔试-3】HJ20 密码验证合格程序

【华为笔试-3】HJ20 密码验证合格程序HJ20 密码验证程序输入: 021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000输出: OK NG NG OK注:输入结束后有中止结束标志EOF【这个原题给的时候无说明,自己跑他的用例和看论坛看出来的】题解: 要点有三个,分别是:长度超过八位、包含三…

记Linux使用异常2

麒麟v10系统开机后提示如下信息,并进入initramfs模式,[0.224166][ 0l dmi: Firmware registration failed, [0.936010][ 0] serial8250 serial8250.0: unable to register port at index 1 (IOFFFFF10204000000 MEM0 IRQ0): -22 [1.829735][ 0] i8042: i8042 controller self…