Замыкание и утечка памяти в Javascript

305
25 января 2018, 21:00

Помогите разобраться с алгоритмом сборщика мусора. Не могу найти статьи, в которых описывался бы подобный случай:

/**
* @param {ParentClass}
*/
function SomeClass(ParentClass){
    this.parent = ParentClass
}
function ParentClass(){
   this.child = new SomeClass(this)
}

var someObj = new ParentClass();
someObj = null /*эта операция приведет к утечке памяти, 
т.к. ссылка на someObj осталась внутри свойства someObj.child.parent */

Верно ли утверждение в комментарии? Или же сборщик мусора поймет, что из window к созданному экземпляру нет доступа, и его можно убрать? Как мне это проверить?

Доп.: Не могу разобраться с вкладкой "Memory" в Chrome: на что смотреть, чтобы понять отработал ли сборщик мусора или нет? Если есть актуальные статьи -- скиньте, плз. На хабре видел только устаревший пост о профилировании из 2012 года.

Answer 1
  1. Верно для старых движков js, сборщик мусора которых использовал алгоритм подсчета ссылок, вследствие чего циклические ссылки порождали ситуацию, когда сборщик мусора не освобождал объекты. С переходом на алгоритм mark-and-sweep утечка неактуальна. Подробнее см.: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
  2. Сборщики мусора задуманы устроены так, что работают незаметно для пользователя, проводя очистку тогда, когда это нужно. Несмотря на то, что комьюнити предлагает разработчикам реализовать возможность отслеживания удаления объекта сборщиком мусора посредством событий, разработчики стандарта категорически против этого, т.к. это противоречит смыслу недетерминированной сборки мусора (https://github.com/WebAssembly/design/issues/238#issuecomment-116877193).
READ ALSO
Как получить объект из data атрибута?

Как получить объект из data атрибута?

Почему когда вывожу первый раз consolelog();, атрибут возвращает строку, а не объект? А если установить через JS данный атрибут, то возвращает уже...

258
Безопасность куки

Безопасность куки

Объясните пожалуйста почему куки считают не безопасными? Я думаю что это вполне себе безопасная вещь, я просто хочу убедится в этомКуки по подсунутой...

254
Как получить attr img через native js?

Как получить attr img через native js?

Привет есть такой код

196