热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Chrome中JavaScript数组究竟占用了若干内存?

原文:HowmuchmemorydoJavaScriptarraystakeupinChrome?译者:justjavac由于我(原作者)的代码运用的很大的内存,所以我看了一下字符

原文:How much memory do Javascript arrays take up in Chrome?
译者:justjavac

由于我(原作者)的代码运用的很大的内存,所以我看了一下字符串、对象、数字和数组离别占用了若干内存。

效果以下:

《在 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 猎取代码。

《在 Chrome 中 Javascript 数组究竟占用了若干内存?》

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…

迎接关注我的民众号,关注前端文章:

《在 Chrome 中 Javascript 数组究竟占用了若干内存?》


推荐阅读
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • Apple iPad:过渡设备还是平板电脑?
    I’vebeenagonizingoverwhethertopostaniPadarticle.Applecertainlydon’tneedmorepublicityandthe ... [详细]
  • 图解 Google V8 # 19 :异步编程(二):V8 是如何实现 async/await 的?
    说明图解GoogleV8学习笔记前端异步编程的方案史1、什么是回调地狱?如果在代码中过多地使用异步回调函数,会将整个代码逻辑打乱,从 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • vb6集成ad登录共享文件_SCSP实验2单点登录
    01—实验目的掌握单点登陆相关原理和深信服配置02—实验环境1.AC版本v12.0.42AC1地址:https:172.172.1.1AC2地址:htt ... [详细]
  • 1、PLSQLDeveloper记住登陆密码在使用PLSQLDeveloper时,为了工作方便希望PLSQLDeveloper记住登录Oracle的用户名和密码&#x ... [详细]
  • v8对象机制1.概述v8中每一个API对象都对应一个内部实现对象(堆对象)2.对象创建过程(1)v8::internal::Factory类: ... [详细]
  • 基于STM32的智能循迹小车设计(基础版)
    基于STM32的智能循迹小车设计(基础版)硬件准备1、小车底盘+四直流电机(带轮)2、STM32F103C8T6核心板3、12V8700mAh锂电池(可以用几节18650锂电池)4 ... [详细]
author-avatar
0o墨滴成殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有