Это хакерский метод, но я попробовал его дважды с разными числами, и он, кажется, соответствует.
Вы можете попытаться выделить огромное количество объектов, например, один или два миллиона объектов того типа, который вам нужен. Поместите объекты в массив, чтобы сборщик мусора не освободил их (обратите внимание, что это приведет к небольшим накладным расходам памяти из-за массива, но я надеюсь, что это не должно иметь значения, кроме того, если вы будете беспокоиться о том, что объекты находятся в памяти храните их где-нибудь). Добавьте предупреждение до и после выделения и в каждом предупреждении проверьте, сколько памяти занимает процесс Firefox. Прежде чем открыть страницу с тестом, убедитесь, что у вас есть свежий экземпляр Firefox. Откройте страницу, обратите внимание на использование памяти после появления предупреждения «до». Закройте оповещение, дождитесь выделения памяти. Вычтите новую память из старой и разделите ее на количество выделенных ресурсов.
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');
Я попробовал это на своем компьютере, и у процесса было 48352 КБ памяти, когда было показано предупреждение «до». После выделения Firefox имел 440236 КБ памяти. Для 2 миллионов выделений это около 200 байтов для каждого объекта.
Я попробовал это снова с распределением в 1 миллион, и результат был похож: 196 байтов на объект (я полагаю, дополнительные данные в 2mill использовались для Array).
Итак, вот хакерский метод, который может вам помочь. JavaScript не предоставляет метод «sizeof» по причине: каждая реализация JavaScript отличается. Например, в Google Chrome та же страница использует около 66 байт для каждого объекта (судя по крайней мере из диспетчера задач).