Це гакітний метод, але я спробував його двічі з різними цифрами, і, здається, він відповідає.
Що ви можете зробити, це спробувати виділити величезну кількість об'єктів, як-от один або два мільйони об'єктів, які ви хочете. Помістіть об’єкти в масив, щоб перешкоджати видачі сміттєзбірника (зверніть увагу, що це додасть невелику накладну пам’ять через масив, але я сподіваюся, що це не має значення, і, крім того, якщо ви будете турбуватися про те, що об’єкти знаходяться в пам'яті , ви їх десь зберігаєте). Додайте попередження до та після розподілу та в кожному попередженні перевіряйте, скільки пам'яті займає процес 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');
Я спробував це на своєму комп’ютері, і процес мав 48352K пам'яті, коли було показано попередження "до". Після виділення Firefox мав 440236K пам'яті. Для 2 мільйонів виділень, це приблизно 200 байт на кожен об'єкт.
Я спробував це ще раз з 1 мільйонами виділень, і результат був подібний: 196 байт на об'єкт (я вважаю, додаткові дані в 2mill використовувались для Array).
Отже, ось прискіпливий метод, який може вам допомогти. JavaScript не дає методу "sizeof" з причини: кожна реалізація JavaScript відрізняється. Наприклад, в Google Chrome на одній і тій же сторінці використовується близько 66 байт для кожного об’єкта (судячи з принаймні менеджера завдань).