热门标签 | 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 数组究竟占用了若干内存?》


推荐阅读
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 深入浅析JVM垃圾回收机制与收集器概述
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》的阅读心得进行整理,详细探讨了JVM的垃圾回收机制及其各类收集器的特点与应用场景。通过分析不同垃圾收集器的工作原理和性能表现,帮助读者深入了解JVM内存管理的核心技术,为优化Java应用程序提供实用指导。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文深入探讨了RecyclerView的缓存与视图复用机制,详细解析了不同类型的缓存及其功能。首先,介绍了屏幕内ViewHolder的Scrap缓存,这是一种最轻量级的缓存方式,旨在提高滚动性能并减少不必要的视图创建。通过分析其设计原理,揭示了Scrap缓存为何能有效提升用户体验。此外,还讨论了其他类型的缓存机制,如RecycledViewPool和ViewCacheExtension,进一步优化了视图复用效率。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
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社区 版权所有