Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
testedObject[ i ] = ... на такое testedObject[ 'item_' + i ] но это ничего не даст.
testedObject = {
1 : {
obj : {....}
},
....
.....
}
testedObject = {
obj : {
1 : {
.....
},
....
.....
}
}
testedObject[ i ] = {
obj : getObject(),
fld1 : val1,
fld2 : val2
// и тд
};
delete testedObject[ i ].obj;
testedObject[ i ].fld1;
testedObject[ i ].fld2;
testedObject[ i ];
testedObject[ i ] = null;
не поможет избавиться от утечки?delete testedObject[ i ].obj; testedObject[ i ].obj = null; сборщик мусора собирает эти объектыtestedObject[ i ].obj = null;
delete testedObject[i].obj, V8 нормализует объект testedObject[i] — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря, который еще и выделяется с запасом по размеру. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе. И так для каждого из ваших объектов. 

delete testedObject[i].obj вы фактически сказали что testedObject[i] — изменяемый и вы можете захотеть впихнуть в него новых данных например а не просто обратиться к его полям в «read-only» режиме)testedObject = {
1 : {
obj : {....}
},
....
.....
}
testedObject = {
obj : {
1 : {
.....
},
....
.....
}
}
testedObject[i] (который Вы не удаляете), для второго варианта родительским элементом является testedObject.obj, то есть в первом варианте (с «утечкой») Вы получаете в остатке:(2*count - count)*N => count*N байт лишними(count + 1 - count)*N => N байт лишнимиcount*N > N, «примерно» в count раз ;)testedObject[i] должен после delete testedObject[i].obj стать размером M, а становится размером (N + M), то есть в первом варианте после «очистки» в идеале должны получить M*count, а получили (N + M)*count, а еще в куче видно, что M много больше N, что немного неправильно.Не совсем, все-таки, на мой взгляд утечка здесь есть
когда вы делаете delete testedObject[i].obj, V8 нормализует объект testedObject[i] — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря, который еще и выделяется с запасом по размеру. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе.
JavaScript: оператор delete создает утечку!?