Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос про finalize / 5 сообщений из 5, страница 1 из 1
31.01.2015, 01:13
    #38868277
Dryn9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про finalize
Добрый вечер. Изучаю Garbage Collector и возник вопрос про метод finalize.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class A{
	protected void finalize()
	{
		System.out.println("Hello");
	}
}

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new A();
		System.gc();
	}

}


Если я создаю объект так: new A(); то метод finalize вызывается и выводится Hello. А если создать например так: A x = new A(); то finalize уже не вызывается. Почему так происходит?
...
Рейтинг: 0 / 0
31.01.2015, 05:57
    #38868308
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про finalize
потому что в x лежит ссылка на объект, а х живет пока main не кончится,
а коллектор убивает объекты, когда на эти объекты нет ссылок
...
Рейтинг: 0 / 0
31.01.2015, 18:46
    #38868505
Dryn9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про finalize
bochkov,

Даже когда делаю так:
A x = new A();
x = null;
все равно коллектор его не убивает.
Еще вопрос: когда заканчивается работа программы коллектор убивает все объекты созданные через new?
...
Рейтинг: 0 / 0
31.01.2015, 19:38
    #38868534
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про finalize
Dryn9, оставь в покое GC. На этапе изучения лучше сосредоточиться на чём-то другом.
Более детерминированном и поддающемуся наблюдению.
...
Рейтинг: 0 / 0
02.02.2015, 10:06
    #38869108
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про finalize
Dryn9bochkov,

Даже когда делаю так:
A x = new A();
x = null;
все равно коллектор его не убивает.
Еще вопрос: когда заканчивается работа программы коллектор убивает все объекты созданные через new?

1. Сборщик мусора не обязан работать при вызове gc()
2. finalize будет вызван когда-нибудь потом. Может быть. Если звёзды удачно лягут.

Вообще забудь про finalize - это одна из бредовых идей создателей java. Теперь- как тот чемодан без ручки- выкинуть нельзя (обратная совместимость), а очень хочется.

.gc() примерно такое же.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос про finalize / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]