Pull to refresh

Comments 12

bool удивил конечно, не ожидал что вот так вот вообще по колхозному. Спасибо за статью!
Bool логичен, т. к. в V8 есть только три типа: SMI (31/32 битный int в зависимости от разрядности), double и object (ссылка, т. е. pointer). В SMI мы запихнуть не можем, в double тоже, остаётся ссылка.

А вот что интереснее, что 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.

И там, и там будут созданы скрытые классы. Предполагать, что к инстансам Object вдруг потребуется добавлять поля, а к инстансам Obj — нет, — достаточно странно.


А для числовых ключей там отдельная логика же.

1 Сколько байт занимает элемент массива, зависит от типа массива, ну еще можно узнать вот так.
let float64 = new Float64Array();
console.log(float64.BYTES_PER_ELEMENT) // 8
let int32 = new Uint32Array();
console.log(int32.BYTES_PER_ELEMENT) // 4
Дошёл только до второго вопроса, но уже ответ в статье неверен. 24 байта — это только в 64-битной версии. В 32-битной, очевидно, 16 байт.

Правильно написать так: 16/24 байта. Что это перевод — знаю :)
Дошёл до третьего вопроса — снова не совсем верно. Сам элемент массива будет занимать 4/8 байт. Просто мы же не только заполнили массив, но ещё и заодно создали много объектов, поэтому требуется дополнительная память. Если бы мы создали эти объекты ранее или переиспользовали бы их, то дополнительная память не потребовалась бы. Хотя это уже придирки к формулировкам.

Впрочем, про структуру объекта не знал, интересно.
Sign up to leave a comment.