JavaScript 的内存管理

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战算法

前言

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

本文你将了解:svn

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

内存的生命周期

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

JavaScript 的内存分配

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

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

垃圾回收机制

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

垃圾收集策略

V8 的内存管理

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

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

总结

内存管理存储比较抽象,可是和咱们平常的研发息息相关,了解内存的管理,对平常处理内存问题也会更加驾轻就熟一些。但愿对你有帮助。code

若是你以为写得不错,帮忙点个赞吧。

参考

相关文章
相关标签/搜索