Когда объект свойства становится неуткоренным и помеченным для сборки мусора? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь понять поведение GC в приведенной ниже реализации.

Я возвращаю новый объект, когда к моему свойству обращаются.Если я получу доступ к своему свойству во второй раз, будет ли первый объект помечен для сбора мусора или он будет укоренен, пока мой MyClass объект жив.

(Это плохая реализация, я знаю,но намерение состоит в том, чтобы знать о GC.)

public class MyClass
{
    public Custom CustomProp=>new Custom();
}

public class Custom
{

}

1 Ответ

0 голосов
/ 06 июня 2019
public Custom CustomProp=>new Custom();

переводится методом getter компилятором:

public Custom get_CustomProp()
{
    return new Custom();
}

Таким образом, нет ссылки на созданный экземпляр Custom, хранящийся в вашем классе. Не о чем беспокоиться, вы (код, который вы показываете) не мешаете ГХ собирать объект.

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

И - как прокомментировал Марк - нет такой вещи, как "маркировка" объекта для GC. Объект готов к GC (проще говоря), если на него больше нет ссылок.
Тот факт, что ваше свойство вызывается во второй раз, не влияет на «коллекционирование» ранее возвращенного экземпляра.

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