Подтвердить что ты не робот

Что такое графа объектов в java?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Возьмем, например:

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

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

Class Bar
{
    String aString = "boo";
}

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

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


Кто-то на wikipedia ставит его более красноречиво, чем я:

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Это Object Graph.

Ответ 6

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

Нажмите, чтобы посмотреть изображение: 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) как круг/квадрат (или любую фигуру) в своей книге заметок/эскизов и рисуете стрелку или строки, чтобы представить, к кому привязан объект (ссылка), с помощью которого вы создаете граф объекта.

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