Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
calculate memory size of javascript object, it is not a accurate value!
function memorySizeOf(obj) {
var bytes = 0;
function sizeOf(obj) {
if(obj !== null && obj !== undefined) {
switch(typeof obj) {
case 'number':
bytes += 8;
break;
case 'string':
bytes += obj.length * 2;
break;
case 'boolean':
bytes += 4;
break;
case 'object':
var objClass = Object.prototype.toString.call(obj).slice(8, -1);
if(objClass === 'Object' || objClass === 'Array') {
for(var key in obj) {
if(!obj.hasOwnProperty(key)) continue;
sizeOf(obj[key]);
}
} else bytes += obj.toString().length * 2;
break;
}
}
return bytes;
};
function formatByteSize(bytes) {
if(bytes < 1024) return bytes + " bytes";
else if(bytes < 1048576) return(bytes / 1024).toFixed(3) + " KiB";
else if(bytes < 1073741824) return(bytes / 1048576).toFixed(3) + " MiB";
else return(bytes / 1073741824).toFixed(3) + " GiB";
};
return formatByteSize(sizeOf(obj));
};
@globalblob

This comment has been minimized.

Copy link

globalblob commented Sep 28, 2016

Thanks for sharing!

@Jevin23

This comment has been minimized.

Copy link

Jevin23 commented Oct 17, 2016

length of name key in object not calculating in this code

@wahengchang

This comment has been minimized.

Copy link

wahengchang commented May 4, 2017

it s awesome !!! thx !

@ArhamAliQureshi

This comment has been minimized.

Copy link

ArhamAliQureshi commented Nov 25, 2017

Thanks a lot....!

@kntrieu

This comment has been minimized.

Copy link

kntrieu commented Jan 10, 2018

Thanks for sharing! :-)

@clewrus

This comment has been minimized.

Copy link

clewrus commented Jun 1, 2018

Thanks !!!

@lucdeit1997

This comment has been minimized.

Copy link

lucdeit1997 commented Jun 9, 2018

NO AWESOME,NO AMAZING, AND NO..., I DON'T NEED, IT'S ..

@StefansArya

This comment has been minimized.

Copy link

StefansArya commented Jun 13, 2018

I think it's better for not calculate keys that refer to an object, as it can be a circular object or that keys was only referring to another object value.

@ganeshmogare

This comment has been minimized.

Copy link

ganeshmogare commented Sep 18, 2018

Super cool !!!! thanks buddy !!!

@hayk-manasyan

This comment has been minimized.

Copy link

hayk-manasyan commented Nov 15, 2018

Supper! Thanks

@aadityataparia

This comment has been minimized.

Copy link

aadityataparia commented Jan 17, 2019

it should be bytes += sizeOf(obj[key]) + sizeOf(key); on line 21

@afwn90cj93201nixr2e1re

This comment has been minimized.

Copy link

afwn90cj93201nixr2e1re commented Feb 7, 2019

it should be bytes += sizeOf(obj[key]) + sizeOf(key); on line 21

no
{ "login":"аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа", "password":"аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа" }

try to get size of this object

with your edit size = ~1.2kb
but real size is ~300-400bytes

@miadian

This comment has been minimized.

Copy link

miadian commented Feb 14, 2019

it should be:

sizeOf(key);
if(!obj.hasOwnProperty(key)) continue;
sizeOf(obj[key]); 

on lines 20,21.

@gi-joe-moto

This comment has been minimized.

Copy link

gi-joe-moto commented Feb 19, 2019

or

if (objClass != 'Array'){
  bytes += 2 * key.length;
}
@hunted-down-developer

This comment has been minimized.

Copy link

hunted-down-developer commented May 8, 2019

this is awesome! thanks!

@akleandrov

This comment has been minimized.

Copy link

akleandrov commented Sep 10, 2019

why boolean is 4 bytes? Maybe you have spec link?

@shevchenkonik

This comment has been minimized.

Copy link

shevchenkonik commented Nov 26, 2019

why boolean is 4 bytes? Maybe you have spec link?

@akleandrov

A boolean is actually 1 byte. But alignment may cause 4 bytes to be used on a 32-bit platform (or 8 bytes on a 64-bit platform). This is an old trick that comes from the observation that allocated memory takes up at least 4 or 8 bytes, and are aligned in such a way that the least significant bit or three will be zero.

Javascript engines (for example V8) are implemented using C++. You can find documentation about the size of boolean values in C++ spec. [1]

More information:
[1] –– http://eel.is/c++draft/expr.sizeof#footnoteref-69
https://www.quora.com/In-C%2B%2B-what-is-the-size-of-type-bool/answer/Sergey-Zubkov-1?ch=10&share=2471829a&srid=lXWU
https://stackoverflow.com/questions/32733314/in-v8-how-are-primitive-types-such-as-null-undefined-and-boolean-stored-in-me

@shevchenkonik

This comment has been minimized.

Copy link

shevchenkonik commented Nov 28, 2019

The function sizeOf doesn't work with Uint8Array and other standard types of arrays.

@sankethmandapati

This comment has been minimized.

Copy link

sankethmandapati commented Jan 9, 2020

Thankyou, it works

@begoat

This comment has been minimized.

Copy link

begoat commented Mar 26, 2020

awesome

@sagar-gavhane

This comment has been minimized.

Copy link

sagar-gavhane commented Jun 14, 2020

If someone looking for npm library to calculate size of an object in memory then give a try to this library: https://github.com/miktam/sizeof#readme

@liSong5713

This comment has been minimized.

Copy link

liSong5713 commented Jun 28, 2020

   `         bytes += obj.length * 2;`  why  obj.length*2 ,it should be Buffer.byteLength(str)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.