Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Соберет ли GC такие объекты? 
V
    Опции темы
SID_M
  Дата 18.5.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



Предположим есть два объекта, в них есть кросс-ссылки друг на друга, больше ссылок нигде нет. Соберет ли Сборщик Мусора такие объекты?
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
AntonSaburov
Дата 18.5.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Судя по документации - должен собрать.
PM MAIL WWW ICQ   Вверх
SID_M
Дата 18.5.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



Цитата(AntonSaburov @  18.5.2009,  13:14 Найти цитируемый пост)
Судя по документации - должен собрать.

Можно ссылочку? Или в двух словах, что там написано?

Вроде как там написано, что если на объект существует хоть одна ссылка, то он будет жить.
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
Се ля ви
Дата 18.5.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 8
Всего: 127



Естественно, соберёт - JVM не дураки писали. Если бы не собирал - зачем тогда GC вообще был бы нужен? Грубо говоря, практически у любого объекта есть какое-нибудь String-поле, а это - отдельный объект, ссылка на который располагается в исконном объекте. Это означает, что если бы эта конструкция не собиралось - практически ничего вообще бы не собиралось вообще.


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Fieral
Дата 18.5.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Цитата(Се ля ви @  18.5.2009,  13:45 Найти цитируемый пост)
Естественно, соберёт - JVM не дураки писали.

Это не аргумент  smile 
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
SID_M
Дата 18.5.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



Ну пусть и не дураки. И приведенный пример: 
Цитата(Се ля ви @  18.5.2009,  13:45 Найти цитируемый пост)
Грубо говоря, практически у любого объекта есть какое-нибудь String-поле, а это - отдельный объект, ссылка на который располагается в исконном объекте.

не подходит под описание. В этом случае Строка содержит ссылку на Объект, к которому она принадлежит, однако у Объекта ссылки никуда не будет. Поэтому естественно предположить, что ветка дерева отсыхает. 

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

И всё-равно вопрос остался. Есть ли кусочек в документации, который сказал бы, что соберет?

P.S. Интуитивно понятно, что должно собраться.


Это сообщение отредактировал(а) SID_M - 18.5.2009, 14:30
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
Fieral
Дата 18.5.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Ну я думаю что сборщик мусора имеет список всех объектов,
берёт i-й элемент этого списка и начинает ходить по всем ссылкам рекурсивно раскрашивая объекты в "i-й" цвет.
Потом смотрит какие цвета отличаются от цвета  стартовавшего класса (который с методом "main(args[])") и их стирает.


--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
SID_M
Дата 18.5.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



А я думаю, что вообще там строится граф и по теории графов ищутся несвязные подграфы и т.д.

Но это всё наши с Вами догадки. А хотелось бы знать, как думали разработчики Java API и GC в частности. 

Рою документацию, кто чего узнает, пишите smile
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
Fieral
Дата 18.5.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Да собсно это "она" (теория графов) и есть:

user posted image
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
LSD
Дата 18.5.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата
Reachability

Going from strongest to weakest, the different levels of reachability reflect the life cycle of an object. They are operationally defined as follows:

  • An object is strongly reachable if it can be reached by some thread without traversing any reference objects. A newly-created object is strongly reachable by the thread that created it.
  • An object is softly reachable if it is not strongly reachable but can be reached by traversing a soft reference.
  • An object is weakly reachable if it is neither strongly nor softly reachable but can be reached by traversing a weak reference. When the weak references to a weakly-reachable object are cleared, the object becomes eligible for finalization.
  • An object is phantom reachable if it is neither strongly, softly, nor weakly reachable, it has been finalized, and some phantom reference refers to it.
  • Finally, an object is unreachable, and therefore eligible for reclamation, when it is not reachable in any of the above ways.



Softly, weakly и phantom reachable объекты могут быть собраны сборщиком мусора.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
SID_M
Дата 18.5.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



О! Lsd справедливо заслужил [+]. Который с радостью ему и вручаю.

А теперь хотелось бы немного обсудить. А то ихние буржуйские термины до меня немного не доходят. 

Получается, что Strongly reachable объекты - это те, которые только что созданы, и по сути ссылок на них еще ни у кого нет, кроме Thread-a в котором они созданы.

Softly reachable объекты - это те, которые не Strongly reachable, но можно найти по ссылкам. 
Тут интересный момент - это же подавляющее большинство объектов рабочей программы. И если они могут быть собраны Сборщиком Мусора, то это же "В корни не верно" ((с) дядюшка ленин). 

Weakly reachable бъекты - это те, которые ни одни из вышеперечисленных, но их можно получить с помощью прохода по weak отношениям (ссылкам). Когда weak ссылки на weak-reachable объекты обнуляются, то объект становится пригодным к финализации. (А раньше он таковым не был?)
Тут непонятно, что это за "слабые" ссылки и чем они существенно отличаются от "легких", описаных в предыдущем пункте? 

Ну дальше не интересно...

Попросим Многоуважаемого Lsd прокомментировать.  smile 
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
Skynin
Дата 18.5.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Соберет, потому что GC убивает недоступные объекты.
Очень грубо:
Строит дерево доступных, сверяет с ссылками на выделенную память и помечает недоступные (то есть вне списка)

Такой же грубый пример сбора доступных объектов:
1. Начинаем просмотр с статических объектов, в объектах ищем ссылки-поля.
2. Просматриваем ссылки в стеке main'а, по ним также исследуем получаем ссылки на объекты
3. Смотрим стеки вызовов методов в потоках, собирая ссылки оттуда.

Сверяем полученный список с списком ссылок под которые выделена память.
Если нет в списке - освобождаем память.

Таким образом GC просто не заметит что есть ссылки друг на друга. Он не проверяет ссылки которыми владеет недоступный объект. Ибо - незачем.

P.S. 
Weak ссылки и вызов финализаторов - просто нюансы процесса сбора ссылок.

Это сообщение отредактировал(а) Skynin - 18.5.2009, 20:49
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Се ля ви
Дата 18.5.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 8
Всего: 127



Цитата(SID_M @  18.5.2009,  14:29 Найти цитируемый пост)
не подходит под описание

Согласен, не удачный пример. Но в общем. я хотел сказать, что такие ситуации - обычное дело при программировании и возникают часто, хотя я сейчас и затрудняюсь привести пример.


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
NightmareZ
Дата 18.5.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: нет
Всего: 13



Цитата(Се ля ви @  18.5.2009,  20:49 Найти цитируемый пост)
хотя я сейчас и затрудняюсь привести пример.

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


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
SID_M
Дата 19.5.2009, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 11.2.2005
Где: Россия, г. Москва

Репутация: нет
Всего: нет



Skynin, лови [+].
Ну, более-менее разобрались. Считаю тему исерпанной и как таковую закрываю.

Спасибо всем, кто участвовал в дискуссии.
--------------------
Если тебе не дано летать, то хотя бы ползай с гордо поднятой головой.
PM MAIL ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.