千家信息网

在Chrome中JavaScript数组到底占用了多少内存

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这期内容当中小编将会给大家带来有关在Chrome中JavaScript数组到底占用了多少内存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。因为我(原作者)的代码使用
千家信息网最后更新 2025年02月23日在Chrome中JavaScript数组到底占用了多少内存

这期内容当中小编将会给大家带来有关在Chrome中JavaScript数组到底占用了多少内存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

因为我(原作者)的代码使用的很大的内存,所以我看了一下字符串、对象、数字和数组分别占用了多少内存。

结果如下:

我觉得这些数据最大的挑战是,空数组或者空列表占用的内存太小了。

因此我创建了大量空列表,而不是每次重新使用相同的空列表。

-总大小 MB每一项的大小 Byte
Empty Fields7.638.00
Booleans9.279.72
Numbers9.279.72
Identical Strings9.279.72
Arrays39.7941.72
Empty Objects62.6865.72

我不完全理解这些结果。它们依赖于 JavaScript 引擎的内部结构。

空字段的大小是有道理的。每一项正好占用 8 个字节。(整个数组实际上占用了 8,000,048 个字节,因此有 48 个字节是数组本身的开销。)

但是,数字的数组却不符合我的期望。JavaScript 使用双精度(64 位)浮点数。64 位是 8 字节,但是每个数字平均占用了 9.7 字节。

同样,Chrome 将每个空数组的大小显示为 32 字节,每个空对象的大小为 56 字节。然而,整个数组的平均大小分别为 39.8 和 62.7。

我猜测之所以造成这个差异,一部分来自于 V8 存储数组项的元数据(例如类型信息),并且 Chrome 为数组提供的空间比实际最低要求的空间要多一些。另外,并不是所有的数组在 V8 内部都是相同的。2011 年的这篇博文(value representation in javascript implementations)也很不错。

(译注:以后有时间再写一篇关于 V8 数组内部存储原理的文章,by justjavac)

          // Inheritance hierarchy:// - Object//   - Smi          (immediate small integer)//   - HeapObject   (superclass for everything allocated in the heap)//     - JSReceiver  (suitable for property access)//       - JSObject//         - JSArray//         - JSArrayBuffer//         - JSArrayBufferView//           - JSTypedArray

如果要在 Chrome 中使用内存分析器(Profiler),可以使用此 CodePen 或从 Github 获取代码。

It's also interesting to see what the table looks like with only item in each array:

-数组总大小
Empty Field56
Boolean184
Number184
String216
Array216
Empty Object240

译文完。


补充一些相关知识点,关于 Chrome 内存分析器(Profiler)的使用。

当我们使用内存分析器时,要先创建一个纯净的环境,可以在新建标签页时选择隐身模式或者访客模式。再高级点的用法就是自己新建一个 Chrome 桌面快捷方式并配置相关的命令行参数。

如果你查看了之前的文章,文中提到"打开 Profiles 面板"时,你可能在你的 Chrome 中找不到这个面板,因为 Profiles 已经改名了,现在是 Memory 面板。

在 Memory 面板中,选择 Take Heap Snapshot,可以制作一个堆内存快照。Google 开发者中心有一篇非常不错的文章(有中文版),"如何记录堆快照":https://developers.google.com/web/tools/chrome-devtools/memory-problems/heap-snapshots

上述就是小编为大家分享的在Chrome中JavaScript数组到底占用了多少内存了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

数组 内存 大小 字节 分析 文章 面板 分析器 数字 不错 相同 代码 内容 实际 对象 就是 快照 数据 模式 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 芬兰国家网络安全中心 医院网络技术设计方案 初中网络安全活动总结 江阴互联网智能科技有哪些 服务器安全防护系统带联锁功能 网络安全法保护了什么 飞机加速器手动添加服务器教程 万全t168服务器电源线 网络安全演讲的目的 我的世界40人服务器管理员 数据库管理综合实训报告 暴风影音软件开发者是谁 奉贤区信息网络技术创新服务 幻塔不在一个服务器能一块玩吗 使用数据库检索的感想 深圳市人力资源软件开发 军人网络安全怎么防心得体会 闵行区管理软件开发哪个好 中职计算机网络安全技术 网络安全与信息化相关试题 网络安全法保护了什么 msql 数据库优化 手机软件开发青岗科技 herom2引擎数据库教程 南阳销售管理软件开发 精品购物软件开发 陕西省掌信网络技术有限公司 为什么服务器都用54v电机 软件开发只是前端后端 大型数据库应用体系
0