【内存泄漏和内存溢出】JavaScript之深入浅出理解内存泄漏和内存溢出
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
【内存泄漏和内存溢出】JavaScript之深入浅出理解内存泄漏和内存溢出的更多相关文章
- 一篇文章带你了解JavaScript中的变量,作用域和内存问题
1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为应用类型值. 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaS ...
- webpack打包---报错内存溢出javaScript heap out of memory
今天, npm run build打包时,又报内存溢出了.所以记录一下,之前查了博客有一些解释. “报错CALL_AND_RETRY_LAST Allocation failed - JavaScri ...
- Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法
Investigating Your RAM Usage In this document Interpreting Log Messages 内存分析日志中各消息的含 ...
- android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题
android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题 android createbitmap函数内存溢出,求解怎样进行处理out of memor ...
- javascript中的变量、作用域和内存问题
1.变量 变量的值的类型:基本类型值和引用类型值两种. 基本类型:Undefined.Null.Boolean.String.Number,这五类基本数据类型的值在内存中占有固定大小的空间,因此保存在 ...
- Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)
Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...
- 深入理解java虚拟机---->java内存区域与内存溢出异常
2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存 ...
- JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝
前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScri ...
- 【转载】java项目中经常碰到的内存溢出问题: java.lang.OutOfMemoryError: PermGen space, 堆内存和非堆内存,写的很好,理解很方便
Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决 解决方案 在 catalin ...
- 根据Facebook内存的管理使用,浅谈在iOS上自动检测内存泄漏问题
分装库下载:https://github.com/facebook/FBMemoryProfiler FBMemoryProfiler类库使用教程:http://ifujun.com/fbmemory ...
随机推荐
- Filezilla提权漏洞复现
FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户 ...
- ChatMoney让你不再恋爱脑!
本文由 ChatMoney团队出品 你是否曾经想过,为什么我们会在恋爱中变得如此"上头",仿佛整个世界都围绕着那个TA旋转? 恋爱脑,通常是指一个人在恋爱中过度投入.过度依赖对方, ...
- 你应该懂的AI 大模型(五)之 LangChain 之 LCEL
本文 对<LangChain>一文中的 Chain 与 LCEL 部分的示例进行详细的展示. 先回顾下 在LangChain框架中,Chain(链) 和 LCEL(LangChain Ex ...
- Mac launchctl 自定义服务启动
原文:https://ichochy.com/posts/20231128.html launchd launchd – 系统范围内的守护进程(LaunchDaemons)/代理程序(LaunchAg ...
- Java源码分析系列笔记-14.ThreadPool
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. set方法 3.3.1. 先获取Thread对应的ThreadLocalMap 3.3.2. 有的话 ...
- JavaScript Quine揭秘:如何让程序输出自身源代码?
介绍 如何写一段javascript程序,输出自身的源代码?这个问题非常有意思,大家不妨先尝试一下,反正在尝试了半个小时之后,我果断放弃了. 这种能输出自身的程序在英文里被称为quine. 准备知识 ...
- Golang基础笔记十之goroutine和channel
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十之goroutine和channel 这一篇介绍 Golang 里的 goroutine 和 channel 通道. 以下是本篇笔记 ...
- @Data 注解
简介 对于 Data 注解基本理解而言就是生成 getter & setter 函数 但是经过探究 不单单有getter & setter 还有 toString方法 hashCode ...
- 入门书籍 web前端开发最佳实践
高效web前端开发 book PageSpeed 出自google公司 是一款 免费的工具 性能分析 Timeline网页交互 和渲染 所要花费的时间 Profile谁 可以查看网页c ...
- 无重复字符最长子串无重复字符最长子串 leetcode 3
简介 使用滑动窗口 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/h ...