Имеют ли ссылки на объекты дополнительную память?

Предположим, что у вас есть следующий сложный объект:

var object1 = .... // (something complexed)

Это занимает x количество памяти в вашем приложении JS. Теперь скажем, что у вас есть другие объекты, которые ссылаются на object1:

var otherObject = { something: true, value: 'yes', object: object1 };

var anotherObject = { color: '#FFF', object: object1 };

Разве я утроил объем памяти, который первоначально принимал object1? Или ссылки на object1 не добавляют к служебным данным используемой памяти?

Я не уверен, как проверить это сам, чтобы определить ответ. (Бонусные баллы, если вы можете сказать мне, как указать мне инструмент, который помогает проверить это).

Ответы

Ответ 1

Объекты всегда передаются по ссылке в JavaScript (см. этот популярный ответ). Указатель на объект занимает некоторое количество памяти (зависит от реализации), конечно, но гораздо меньше, чем фактический объект.

Ответ 2

Взгляните на этот вопрос. Числа, строки и т.д. Всегда вызывается значением, но объекты вызываются путем совместного использования; то есть они вызываются по значению, но это значение является ссылкой на объект.

Другими словами, если вы изменяете свойства указателя, вы изменяете тот же пул памяти, что и объект. Но если вы переназначите указатель, это не повлияет на исходный объект.

Это означает, что в вашем примере вы не утроили объем памяти, который object1 занял, , но дополнительные указатели на object1 занимают некоторое пространство памяти. Сколько места? Это зависит от точной реализации движка Javascript, но всегда будет намного меньше размера объекта.

Что касается бенчмаркинга, посмотрите документацию Mozilla для своего движка JS, SpiderMonkey. Там есть много хороших коммунальных услуг....