![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
В языке Python есть такая известная проблема. Представьте, что у вас есть два объекта, ссылающиеся друг на друга и имеющие прописанные программистом деструкторы. Пришло время для сборки мусора. Вопрос - какой объект удалить первым? Мы ведь не знаем точно, что происходит в деструкторах. А вдруг он использует ссылку на объект, который мы только что удалили? Python в таких случаях ничего не делает и оставляет объекты в памяти до завершения программы. Решается проблема с помощью weakptr.
Скажите, а что делает Java с в аналогичной ситуации? Да, я знаю, что finalize() - это не деструктор, но все же, согласитесь, что ситуация аналогичная. Может, перед вызовом finalize() всем внешним ссылкам присваивается null? |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Я думаю, что сначала finalize() вызывается для 2 объектов и только потом они удаляются.
А вообще не надо использовать finalize(). -------------------- Lost.... |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Kangaroo, а нет ли способа узнать более точно? Экспериментальным образом или обратившись к некой документации? А то я небольшой спец по Java.
|
|||
|
||||
Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 6 Всего: 10 |
finalize() настолько не деструктор что проблема такая непонятно откуда возникает. Он может вообще не вызваться за все время работы программы.
2ое - порядок его вызова неопределен. Сборщик мусора при первом освобождении объекта ставит его в очередь 3е - странности_финализации
Не может. Сборщик мусора таких не занимается. Если ваши объекты ссылаются друг на друга да еще почему-то используют finalize(), которому нужны работающие ссылки на другие объекты, то сами и разбирайтесь, зачем так сложно понакрутили? Можно еще глянуть на фантомные ссылки: Гугл: Java фантомные ссылки |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |