2012-02-05 4 views
3

Для обеспечения эффективности использования ГК - это делает периодические зачистки GC более быстрыми и/или менее частыми при заданном размере кучи, платит ли в родительском дочернем дереве использование слабых ссылок у детей для ссылки на своих родителей для предотвращения циклов ссылки GC ? Или разница незначительна?Платит ли за использование слабой (или мягкой и т. Д.) Ссылку в качестве родительской ссылки в дереве?

уточнить Я имею в виду использование слабых ссылок вместо сильной ссылки. Можно предположить, что мне нужно получить доступ к родительскому элементу из дочернего элемента и дочерних элементов из родительского элемента, поскольку доступ необходим за пределами обходов.

+0

Что вы пытались выяснить до сих пор? – stryba

+0

ну в системе подсчета ссылок вы не можете иметь циклы и конвертировать в java :) просмотрели многие документы, но не упоминают, влияет ли структура графика дескриптора объекта или не влияет на производительность GC. – peterk

ответ

2

У Java нет проблем со ссылочными циклами, поэтому, если это ваша единственная проблема, тогда нет, вам не нужно использовать ссылки Weak/Soft для родительских ссылок.

+0

, если это правда, что нет никакой разницы в производительности GC, то нет причин не использовать сильную ссылку. – peterk

0

Я не эксперт в области JVM, но, похоже, это еще хуже. Мягкие/Слабые связи вступают в игру, когда объект недоступен через сильные ссылки. Исходящие ссылки не должны влиять на право объекта на сбор мусора. Ссылка на родителя является исходящей. Рассмотрим две ситуации:

  • Ребенок имеет право на сбор мусора, а предки имеют право . Я ожидал бы, что все дерево имеет право на сбор мусора .
  • Ребенок не имеет права на сбор мусора, и там не являются прочными связями с предками. Если домены достигают только через слабые звенья, тогда они должны быть GCed. Может ли это повлиять на правильность программы ?

Говоря об исполнении приложений, программы GC-free дают гораздо более предсказуемость, чем игра с более слабыми ссылочными типами. Письмо GC-free является предпочтительным способом борьбы с сбором мусора (если это является причиной ваших проблем с производительностью)

Для получения дополнительной информации вы можете обратиться, например, к офису Memory Management in the Java Hotspot Virtual Machine.

+0

Очевидно, что родители не получат GC'ed. Я думаю, что он предполагает, что если есть soft-link, GC не будет следовать ему, чтобы определить, какие объекты достижимы. (Объект, доступный только по слабой ссылке, не должен быть сохранен в любом случае.) – aioobe

+0

@aioobe, не могли бы вы объяснить, почему? Раньше я думал, что если какой-то объект не имеет сильных ссылок, он должен быть GCed. F.I. Документация WeakReference гласит: «Слабые ссылочные объекты, которые не мешают их референтам быть окончательными, финализированными, а затем исправлены».(Объект -> WeakReference -> Приемлемо для GC) –

+0

Право. Нужно ли GC следовать слабым рекомендациям? (Нет, поскольку все, что он находит, все равно можно считать «недостижимым».) Таким образом, гипотеза состоит в том, что я полагаю, что слабая ссылка не будет пройдена. – aioobe

0

Это зависит от того, как вы используете свое дерево.

Если вы не требуете родительских элементов дерева и не ссылаетесь на родителей из других частей вашего приложения, тогда он может заплатить за использование какой-то слабой ссылки от ребенка к родительскому. Имейте в виду, что вы позволите произвольно собирать ваши родительские элементы. Кроме того, ваше дерево должно быть существенно большим, чтобы увидеть разницу в периодическом GC.

Конечно, если вы не требуете ссылки на родительские элементы, то я бы вообще не рассматривал родительский параметр. Это сделает вашу реализацию более последовательной и менее сложной.

 Смежные вопросы

  • Нет связанных вопросов^_^