Правила GC: как выяснить, подходит ли объект Java для сборки мусора или нет - PullRequest
1 голос
/ 19 марта 2010

Кто-нибудь указывает мне набор определенных правил, чтобы выяснить, есть ли право на сборку мусора для объектов Java и простой пример для этого.

1 Ответ

3 голосов
/ 19 марта 2010

Объекты имеют право на GC'ing, когда они больше не достижимы из любого потока.

Объект O доступен из другого объекта A, если либо:

  • A имеет ссылку на O, или
  • A имеет ссылку на объект, из которого O достижима

Так что, если у вас было: class Foo { Bar x = new Bar(); } и class Bar { Bar y = new Baz(); }, и один из ваших потоков имел экземпляр Foo, тогда все экземпляры Foo, Bar и Baz были бы доступны и не подходили для GC. (Поток имеет ссылку на экземпляр Foo, который имеет ссылку на экземпляр Bar, который имеет ссылку на экземпляр Baz).

Если затем вы установите x на null (или другой объект) в вашем экземпляре Foo, ни экземпляры Bar, ни Baz не будут доступны. (Поток по-прежнему имеет ссылку на экземпляр Foo, а экземпляр Bar имеет ссылку на экземпляр Baz, но экземпляр Foo больше не содержит ссылку на экземпляр Bar). Поэтому оба экземпляра Bar и Baz будут иметь право на GC.

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