Comments 12
А вот что интереснее, что SMI на 32-битной версии занимает положенные ему 4 байта, а на 64-битной — 8. Понятно, что это для того, чтобы работать с ним также, как со ссылками, но необычно выходит.
1 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
2 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
3 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
4 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
5 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
6 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
7 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
8 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
9 Сколько угодно. Зависит от версии V8, платформы, не факт, что не изменится в будущем.
Не понимаю, в чем смысл этих каверзных вопросов.
От этой статьи есть одна небольшая польза.
В комментариях на Хабре бытует мнение, что Javascript очень прожорливый по памяти и любой hello world сожрет сотни мегабайт. Это статья показывает что памяти занимается ровно столько, сколько нужно. Конкрентые цифры зависят от движка, платформы и т.д., но хотя бы порядок цифры прикинуть можно.
Если всё, что написано в статье, правда, то память расходуется крайне не эффективно.
В (1) утверждается, что числа хранятся как значения (8 байт), а в (2), что добавление строки внезапно приводит к упаковыванию всех числел в объекты (24 байта), что крайне расточительно, неэффективно и вообще тупо так делать. Всё, что надо сделать, чтобы отличать числа от ссылок — это использовать старшие 1-2 бита в качестве метки типа.
В (3) утверждается, что экземпляр Object кушает 64 байта, а в (4) экземпляр Obj внезапно кушает 32. Я не вижу принципиальной разницы между этими двумя типами объектов. Сотворить такую логику можно лишь в пьяном угаре.
V8 может изучить код программы, и понять
В слабо типизизованном динамическом языке, ага, конечно.
и какие в этом проблемы? гуглите speculative optimizations, turboFun, v8 optimization killers.
Вопросы интересные, но это уже придирки по мелочам. Такое лучше спросить у разработчиков V8 или у автора оригинала
В (3) утверждается, что экземпляр Object кушает 64 байта, а в (4) экземпляр Obj внезапно кушает 32. Я не вижу принципиальной разницы между этими двумя типами объектов.
Принципиально-интерфейсной разницы нет. Но Вы же, скорее всего, понимаете принципиально-реализационную разницу (скорости добавления и расходования памяти) для первых четырех полей этого объекта: Array vs LinkedList.
let float64 = new Float64Array();
console.log(float64.BYTES_PER_ELEMENT) // 8
let int32 = new Uint32Array();
console.log(int32.BYTES_PER_ELEMENT) // 4
Правильно написать так: 16/24 байта. Что это перевод — знаю :)
Впрочем, про структуру объекта не знал, интересно.
Девять вопросов о работе с памятью в V8