博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Chrome 中 JavaScript 数组到底占用了多少内存?
阅读量:6359 次
发布时间:2019-06-23

本文共 1567 字,大约阅读时间需要 5 分钟。

原文:

译者:

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

结果如下:

array memory chart justjavac

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

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

-   总大小 MB 每一项的大小 Byte
Empty Fields 7.63 8.00
Booleans 9.27 9.72
Numbers 9.27 9.72
Identical Strings 9.27 9.72
Arrays 39.79 41.72
Empty Objects 62.68 65.72

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

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

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

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

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

(译注:以后有时间再写一篇关于 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),可以使用此 或从 获取代码。

memory profiler - justjavac

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

- 数组总大小
Empty Field 56
Boolean 184
Number 184
String 216
Array 216
Empty Object 240

译文完。


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

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

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

在 Memory 面板中,选择 Take Heap Snapshot,可以制作一个堆内存快照。Google 开发者中心有一篇非常不错的文章(有中文版),“如何记录堆快照”:


欢迎关注我的公众号,关注前端文章:

justjavac微信公众号

转载地址:http://itbma.baihongyu.com/

你可能感兴趣的文章
生成 39 条形码
查看>>
抽象工厂理解
查看>>
计网第四章网络层(二)
查看>>
vs 行数
查看>>
nodejs下的express安装
查看>>
表单中的单文件点击和拖拽上传
查看>>
BZOJ1396 识别子串
查看>>
【转】numpy中 meshgrid 和 mgrid 的区别和使用
查看>>
【转】python中的闭包
查看>>
编程总结模版
查看>>
成为linux的合格公民
查看>>
小心陷阱:二维动态内存的不连续性
查看>>
转:关于启用 HTTPS 的一些经验分享(一)
查看>>
复习HTML、CSS、JS练习题
查看>>
[Android] 进程(Process)和线程(Thread)
查看>>
STL容器及泛型算法
查看>>
Android 检查手机和电脑连接的时候,执行 adb devices后,提示adb server is out of date. killing.....
查看>>
Django---分页器、中间件
查看>>
Hybrid设计--离线更新
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>