Побочный эффект оператора «delete» в JavaScript
Как говорится «век живи, век учись, дураком помрёшь»:
Объяснение (по крайней мере для Хрома) очень простое: когда вы делаете delete testedObject[i].obj, V8 нормализует объект testedObject[i] — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря, который еще и выделяется с запасом по размеру. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе. И так для каждого из ваших объектов.
Из коментария к статье на «Хабре», которая описывает странный эффект — при использовании оператора delete что-то продолжает занимать память.
Я правильно понимаю что тут написано:
«когда вы делаете
var cur = testedObject[i];
delete cur.obj
V8 нормализует объект cur — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе.»?
Или иначе:
«когда вы делаете
var cur = {obj: {}, value: 55, sign: „5vvsgggs“};
testedObject[i] = cur;
delete cur.obj
V8 нормализует объект cur... При этом V8 не замечает, что после удаления в словаре будет пусто»
Нас не запутаешь! У меня все ходы записаны! Вместо *delete testedObject[i]* какой-то *delete testedObject[i].obj* подсовывают! А потом ещё и баги из скриншотов хрома в мозилу отправляют.
Комментарий для Глеб Арестов (http://arestov.me/):
Ну так в исходной статье на Хабре речь и идёт o testedObject[i].obj.