В Javascript передача объекта другому классу вызывает утечку памяти? - PullRequest
0 голосов
/ 17 января 2019

Если класс A имеет объект и передает его в класс B, будет ли предотвращен сбор мусора для класса A, поскольку класс B имеет ссылку на объект в классе A?

1 Ответ

0 голосов
/ 17 января 2019

tldr
Объект А будет мусором.

Почему?
Ну, каждый объект в Javascript живет только до тех пор, пока есть ссылка на этот объект. Поскольку в какой-то момент нет ссылки на объект A, он будет удален. Но общий объект, давайте назовем его объектом C, никогда не «принадлежал» объекту A, объект A имел только ссылку на объект C. Поскольку B все еще имеет ссылку на C, C не будет удален.

А как насчет не ссылочных типов?
Хотя ссылочные типы никогда не принадлежат, а существуют как ссылки, примитивные типы принадлежат их родителям.

a = { x: "lorem ipsum" };
b = { y: a.x };

Это означает, что в приведенном выше примере строка «lorem ipsum» дважды сохраняется в памяти. Если объект a удален, то строка тоже. Это не влияет на b, поскольку строка была скопирована по значению, что означает, что она была записана во второй раз в память.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...