查看原文
其他

JavaScript怎样查看变量所占内存的大小

码中人 码农真经 2023-12-25

在python中,可以使用 sys.getsizeof 方法可以查看 python 对象的内存占用(单位:字节 byte)。

而JavaScript 不提供  C 系列语言中的sizeof方法,程序员不需要关心内存分配/释放。所以,该操作在js中相对比较麻烦。

本文总结了三个行之有效的方法,虽不精准,但也能粗略的估算对象在内存中的大小。




01 chrome 开发者工具法


chrome 开发者工具 -> memory -> Take snapshot -> 点击快照,在列表中寻找你的变量。

如下代码:在window对象下,生成对象、字符串、数组三个变量。

变量名以A_开头,如果是按名字排序,方便查找。

变量也可以适当弄大一点,按大小排序,方便查看。

window.A_object = { "name":"matt", "site":"www.mzh.ren", "job":"boss", "hobby":(new Array(1024**2).fill("coding")).join('...')}
window.A_array = new Array(1024**2).fill("coding...")
window.A_string = (new Array(1024**2).fill("coding")).join('...')

在生成的快照中找到对应的网页的Window对象。

解释一下字段含义:

  • 浅层大小 :对象本身占用的内存

  • 保留的大小:对象本身及其引用总共占用的内存

  • 距离:当前对象到根的引用层级距离

简单直接,一目了然。



02 object-sizeof


object-sizeof – npm  

https://www.npmjs.com/package/object-sizeof

根据 ECMAScript 语言规范,每个 String 值由 16 位无符号整数表示,Number 使用双精度 64 位格式 IEEE 754 值,包括特殊的“非数字”(NaN)值、正无穷大, 和负无穷大。

在此基础上,就可以计算一个js对象将分配多少内存。

object-sizeof,就是一个这样的类库。

注意,该类库不适用于 V8 引擎,因为V8对编译后的代码还进行了大量优化,所以理论上object-sizeof得到的变量大小,应大于chrome开发工具的大小。

安装 object-sizeof

npm install object-sizeof

类似代码:

const sizeof = require('object-sizeof')
const A_object = { "name":"matt", "site":"www.mzh.ren", "job":"boss", "hobby":(new Array(1024**2).fill("coding")).join('...')}
const A_array = new Array(1024**2).fill("coding...")
const A_string = (new Array(1024**2).fill("coding")).join('...')
console.log("A_object",sizeof(A_object))console.log("A_string",sizeof(A_string))console.log("A_array",sizeof(A_array))

得到大小:

确实要大于chrome开发者工具。

object-sizeof内部代码实现(核心部分):




03 查看进程


这个方法相当硬核。

memory – JavaScript object size – Stack Overflow

首先,打开PC的内存管理器。

在需要测算的代码前alert中断进程,代码执行完之后,再alert。再查看浏览器所占内存的变化。

这个办法是不是有点生猛?

代码如下:

function Marks() { this.maxMarks = 100;}
function Student() { this.firstName = "firstName"; this.lastName = "lastName"; this.marks = new Marks();}
var manyObjects = new Array();alert('before');for (var i = 0; i < 2000000; i++) manyObjects[i] = new Student();alert('after');


往期推荐

《沙丘2021》简短观后感

图灵600+

万物皆数学:在生活中发现数学的妙用(套装共12册)

《优雅的辩论》如何与意见相左的人和平对话?

学会这四句话,发家致富指日可待(读《胡雪岩》笔记)

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存