JavaScript 的内存管理

简介: 本文你将了解:• js 的内存分配• 垃圾回收机制• 垃圾回收策略• V8 的内存管理• V8 的回收策略

网络异常,图片无法展示
|


前言


任何程序的运行都需要分配内存,如我们运行一个网页。如果分配的一些内存不能及时的得到释放,就称为内存泄露,当出现大量的内存泄露时,就是内存溢出,内存溢出简单来说就是我们使用的内存大于系统能够提供的内存空间,内存溢出的的直接现象就是页面的卡顿,更严重的就是页面的崩溃。导致用户体验差,用户流失。


本文你将了解:

  • js 的内存分配
  • 垃圾回收机制
  • 垃圾回收策略
  • V8 的内存管理
  • V8 的回收策略


内存的生命周期


不管什么程序语言,内存生命周期基本是一致的:

网络异常,图片无法展示
|


JavaScript 的内存分配



网络异常,图片无法展示
|

JS的数据类型分为两种,一种是原始数据类型,包括string、number、boolean、null、undefined、sybmol、bigint 。还有一种是引用数据类型Object。数据类型不同在内存存储方式也是不一样的,内存分为三种,栈内存、堆内存和代码空间。

网络异常,图片无法展示
|

栈内存 是一种后进先出的结构,例如一个水桶,水桶的底部就相当于栈底,水桶的进水处就相当于栈顶,水桶的水由栈顶进入,栈顶 出去,由于原始数据类型是大小固定的,由内存自动分配内存所以他存在于栈内存中。我们创建一个变量,例如var a = 10; 在内存中是先将10放入内存的,在将a放入内存,然后把a和10关联起来。而引用数据类型,大小不固定,存储在堆中,例如 一个对象var obj = {},首先在堆中会开辟出一块内存出来,存储对象的值,然后生成一个十六进制的地址码,最后在栈 中放入这个地址码,并放入obj,使地址码和obj关联起来。


垃圾回收机制


找出那些不在继续使用的变量,然后回收他们所占用的内存,垃圾回收器会隔一段时间进行一次垃圾回收,不同的引擎这个回收时间不一致。js使用垃圾回收来自动管理内存,但是垃圾回收是一把双刃剑。

网络异常,图片无法展示
|


垃圾收集策略



网络异常,图片无法展示
|

V8 的内存管理


首先我们要知道 V8 是有内存限制的,这里你可能会奇怪为什么 V8 会有内存的限制了?

网络异常,图片无法展示
|

哪 V8 的回收测试又是怎么样的了。其实 V8 采用分代回收的策略,将内存分为新生代老生代。V8对新生代和老生代采用不同的垃圾回收算法来提升效率。

网络异常,图片无法展示
|


总结


内存管理存储比较抽象,但是和我们日常的研发息息相关,了解内存的管理,对日常处理内存问题也会更加得心应手一些。希望对你有帮助。

如果你觉得写得不错,帮忙点个赞吧。


参考



目录
相关文章
|
2月前
|
存储 缓存 JavaScript
请描述一种JavaScript内存泄漏的情况,并说明如何避免这种情况的发生。
JavaScript内存泄漏常由闭包引起,导致无用对象滞留内存,影响性能。例如,当一个函数返回访问大型对象的闭包,即使函数执行完,对象仍被闭包引用,无法被垃圾回收。防止泄漏需及时解除引用,注意事件监听器清理,使用WeakMap或WeakSet,定期清理缓存,以及利用性能分析工具检测。
13 2
|
12天前
|
存储 缓存 JavaScript
【Web 前端】JS哪些操作会造成内存泄露?
【4月更文挑战第22天】【Web 前端】JS哪些操作会造成内存泄露?
|
25天前
|
JavaScript 前端开发
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 内存溢出问题
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 内存溢出问题
18 1
|
1月前
|
JavaScript 前端开发 Java
JavaScript中的内存泄露:如何避免及修复
JavaScript中的内存泄露:如何避免及修复
30 3
|
4月前
|
前端开发 JavaScript 算法
JavaScript 内存管理的秘密武器:垃圾回收(下)
JavaScript 内存管理的秘密武器:垃圾回收(下)
JavaScript 内存管理的秘密武器:垃圾回收(下)
|
4月前
|
前端开发 JavaScript 算法
JavaScript 内存管理的秘密武器:垃圾回收(上)
JavaScript 内存管理的秘密武器:垃圾回收(上)
JavaScript 内存管理的秘密武器:垃圾回收(上)
|
4月前
|
Web App开发 前端开发 JavaScript
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
|
4月前
|
缓存 JavaScript 前端开发
从引擎到垃圾回收器:JavaScript内存管理全方位解析(二)
从引擎到垃圾回收器:JavaScript内存管理全方位解析
|
4月前
|
存储 JavaScript 前端开发
从引擎到垃圾回收器:JavaScript内存管理全方位解析(一)
从引擎到垃圾回收器:JavaScript内存管理全方位解析
|
4月前
|
JavaScript 前端开发 Java
说说javascript内存泄漏的几种情况?
JavaScript内存泄漏是指应用程序中的内存不再被使用,但没有被正确释放,导致内存占用不断增加,最终可能导致应用程序性能下降或崩溃。
14 0