javascript - Memory efficient way to copy an array -


so i'm trying find memory-efficient way copy array. suppose have arr1 contains 500000 elements of value true:

var arr1 = [];  (var = 0; < 500000; i++) {     arr1[i] = true; } 

in node.js, occupies 32.3 mib (including 18.7 mib when node starts). now, when make reference arr1, no memory allocated:

var arr2 = arr1; 

now, when perform copy of arr1 arr2:

var arr2 = arr1.concat(); 

the process occupies 36.2 mib, 4 mib.

here's thing: no matter empty or wipe original array, memory allocated array won't freed or picked garbage collector. suppose have:

arr1.length = 0; delete arr1; arr1 = undefined;  arr1 = arr2.concat(); 

thanks that, process occupies 39.8 mib.

so happening here? there secret reference original array node (or whatever js engine out there) trying hide me? here's further code:

arr2.length = 0; delete arr2; arr2 = undefined;  arr2 = arr1.concat(); 

which "empty" arr2 can hold copy of arr1. may have figured out, i'm attemping transfer array's contents , forth, process occupies 43.5 mib. if large array, memory intake huge. there way this, taking memory efficienty account?

your profiling technique not correct.

i created array same way , created "a clone" same .concat() method do, , here results

enter image description here

so can see it's same array (that takes ~2.06mb) retained 2 references.

the corresponding jsfiddle: http://jsfiddle.net/6o0h0r1j/

relevant reading:

to summarize: assumptions wrong beginning.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -