Рассмотрим следующие два варианта:В V8 почему массив preallocated потребляет меньше памяти?
const mb_before = process.memoryUsage().heapUsed/1024/1024;
const n = 15849;
const o = 115;
const entries = [];
for (var i = 0; i < n; i++) {
const subarr = [];
for (var j = 0; j < o; j++) {
subarr.push(Math.random());
}
entries.push(subarr);
}
const mb_after = process.memoryUsage().heapUsed/1024/1024;
console.log('arr using ' + (mb_after - mb_before) + ' megabyte');
// arr using 15.110992431640625 megabyte
и
const mb_before = process.memoryUsage().heapUsed/1024/1024;
const n = 15849;
const o = 115;
const entries = new Array(n);
for (var i = 0; i < n; i++) {
const subarr = new Array(o);
for (var j = 0; j < o; j++) {
subarr[j] = Math.random();
}
entries[i] = subarr;
}
const mb_after = process.memoryUsage().heapUsed/1024/1024;
console.log('arr using ' + (mb_after - mb_before) + ' megabyte');
// arr using 12.118911743164062 megabyte
Из моего понимания размера два массива должны быть идентичными, только так, как они были инстанцирован отличается. Как можно объяснить, что результирующее использование памяти последовательно отличается?
Одним словом? Оптимизация. –
@ T.J.Crowder спасибо за исправление; все равно хотел бы знать, как можно оптимизировать сохранение количества данных по-разному на основе метода создания массива. – Tom
Извините, это не значит, что мой удаленный комментарий как * исправление *, как коллегиальная шутка. Извините, если это не получилось. –