Что такое граф объектов в Java? - PullRequest
27 голосов
/ 12 января 2010

Всякий раз, когда я изучаю сборщик мусора, я слышу термин объект График. Что это значит точно?

Ответы [ 6 ]

32 голосов
/ 12 января 2010

Объекты имеют ссылки на другие объекты, которые, в свою очередь, могут иметь ссылки на другие объекты, включая начальный объект. Это создает график объектов, полезных для анализа достижимости. Например, если начальный объект достижим (скажем, он находится в локальном стеке потока), тогда все объекты в графе достижимы, и точный сборщик мусора не может собрать ни один из этих объектов. Точно так же, начиная с набора живых объектов (корней), если мы создаем список всех достижимых объектов, все остальные объекты являются мусором - честной игрой для сбора.

18 голосов
/ 12 января 2010

«Граф объектов» - это концептуализация всех экземпляров объектов из вашей объектной модели (классов в вашей программе) и их взаимосвязей.

Взять например:

У вас есть два класса

Class Foo
{
    String aString = "foo";
    Bar aBar;
}

Class Bar
{
    String aString = "boo";
}

Если вы создадите экземпляр Foo myFoo, а затем создадите экземпляр Bar myBar и соедините их myFoo.aBar = myBar;, ваш граф объектов будет состоять из одного экземпляра Foo со ссылкой на один экземпляр Bar.

Сборщик мусора по существу использует граф объектов для определения того, какие экземпляры в памяти все еще связаны с чем-то и, возможно, необходимы программе, а какие экземпляры больше недоступны и, следовательно, могут быть удалены. * Кто-то в википедии выражает это более красноречиво, чем я:

Объектно-ориентированные приложения содержат сложные сети взаимосвязанных объектов. Объекты связаны друг с другом один объект либо владеющий, либо содержащий другой объект или удерживая ссылку на другой объект. Эта сеть объектов называется графом объектов, и это более абстрактная структура, которая может быть использованы при обсуждении приложений состояние.

7 голосов
/ 12 января 2010

Мы говорим о математическом понятии ориентированного графа, состоящего из узлов и ребер, которые соединяют узлы. Граф объектов - это некоторый граф, узлы которого являются объектами, а ребра которого представляют собой отношения интересов между объектами.

В случае с сборщиком мусора Java, представляющим интерес графом объектов является граф достижимых объектов. На этом графике узлы являются объектами Java, а ребра - это явные или подразумеваемые ссылки, которые позволяют работающей программе «достигать» других объектов из заданного. (Например, подразумеваемая ссылка, есть подразумеваемая ссылка от объекта на его объект Class, и, следовательно, на объекты кучи, содержащие статику классов и ее код ... но я отступаю.)

Как объяснил @Chandra Patni, сборка мусора работает путем обхода графа достижимости, состоящего из всех объектов, которые могут быть достигнуты из одной из набора начальных точек; «корневой набор» в терминологии GC. Любой объект, который не найден в этом обходе графа, больше не может влиять на вычисления и, следовательно, имеет право на сборку мусора.

6 голосов
/ 12 января 2010

Граф объектов - это в основном граф зависимостей между объектами

Он используется для определения того, какие объекты достижимы, а какие нет, чтобы все недостижимые объекты могли быть допущены для сбора мусора.

1 голос
/ 17 декабря 2015

Граф объектов - это сеть экземпляров классов нашего приложения / программного обеспечения, которые в настоящее время существуют в памяти.

Нажмите, чтобы увидеть изображение: http://blog.ploeh.dk/content/binary/Windows-Live-Writer/Compose-object-graphs-with-confidence_921A/Tree_1.png

Это может быть как длинная цепочка объектов, так и короткий объектный граф. Например: допустим, у нас есть классы, такие как PetDog, Owner, PetKennel в приложении. Теперь у PetDog есть владелец, у владельца есть один или несколько PetDog, PetDog обучается из PetKennel, а PetKennel обучает многих PedDog. Теперь, когда мы реализуем эти отношения в объектно-ориентированном подходе, владелец (допустим, вы: экземпляр / объект класса Owner) может ссылаться (ссылаться на) на многие экземпляры PetDog (если у вас много собак, вы ссылаетесь только на один PetDog) , опять же PetDog ссылается на свой конкретный экземпляр / объект владельца (то есть вы в случае с собаками, на мистера Джона будет ссылаться его собака), возможно, вы купили собаку в другом клубе питомника (где собаки также обучены и проданы) затем каждый из экземпляров / объектов PetDog / связан с их конкретными клубами питомника. Это создает сложную сеть объектов, связанных друг с другом.

Если вам случится представить каждый экземпляр / объект (каждый объект PetDog, Owner, PetKennel) в виде круга / квадрата (или любой фигуры) в вашей записной книжке / эскизе и нарисовать стрелку или линии, чтобы представить, с кем связан объект (ссылаясь на ) с помощью какого объекта вы создаете граф объектов.

Иногда случается, что когда вы удаляете или изменяете ссылки между этими экземплярами какого-либо класса, некоторые экземпляры могут не ссылаться (связываться) с другими экземплярами, которые будут удалены сборщиком мусора.

0 голосов
/ 29 августа 2014

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

Это График объекта.

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