powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что плохого в finalize?
15 сообщений из 15, страница 1 из 1
Что плохого в finalize?
    #39720545
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал материала на тему. Хочу тезисно всё уложить в голове на эту тему. Жду исправлений, добавлений.

Это метод класса Object. Вызывается только у объектов у которых он переопределён, это происходит перед тем как GC освободит мусор. Изначально предназначен для очистки каких-нить системных ресурсов. Ни один человек в здравом уме им пользоваться не будет по следующим причинам(Хотя в ждк классах где-то есть его использования):
1. Добавляется лишний цикл работы GC( https://habr.com/post/144544/#comment_9863442) для того, чтобы убрать объект. Честно, я не понял почему.
2. Поток финализации один. То есть есть один консумер который в одном потоке вызывает finalize(). Если один затормозил, то начинает тормозить весь процесс сборки мусора. Но тут можно сделать хак и написать System.runFinalization() и тогда все не финализированные объекты из очереди будут исполняться в новом потоке, а тормозящий будет тормозить в старом потоке.
3.Можно воскресить объект если засетать this внутри finalize. При этом когда он таки помрёт финализатор не вызовется дополнительно.
4.Какая-то херь с наследованием( https://habr.com/post/144544/#comment_9863442). Обязательно надо чтобы именно в этом классе был переопределён finalize даже если он переопределён в родителе.
5. Finalize вызовется хрен знает когда. А может и никогда, если программа закончится до очистки мусора.
6.У Блоха написано в книге что finalize() замедляет работу GC по очистке объекта в 430 раз. Почему?
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720547
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Дубль тема
https://habr.com/post/183344/
Ну и не используй его в своей практике.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720553
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123questioner,
Дубль тема
https://habr.com/post/183344/
Ну и не используй его в своей практике.
Эту статью тоже читал.

Надо знать, что ответить на собесе) Понятно, что это никто не использует.

Ещё забыл

7. Все эксепшены выброшенные внутри этого метода исчезнут бесследно.

8. С 9-ки он deprecated.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720562
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вот такой кусок кода вообще не вызывает финализацию:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class FinalizeTest {

	public static void main(String[] args) throws InterruptedException {
		new Child();
		System.runFinalization();
		Thread.sleep(5000);
		System.out.println("Finished");
	}

	private static class Parent {

		@Override public void finalize() throws Throwable {
			System.out.println("Parent finalize");
		}
	}

	private static class Child extends Parent {

		@Override public void finalize() throws Throwable {
			System.out.println("Child finalize");
		}
	}
}


Видимо как обычно - без гарантий.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720564
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class FinalizeTest {

	public static void main(String[] args) throws InterruptedException {
		new Child();
		System.gc();
		System.runFinalization();
		Thread.sleep(5000);
		System.out.println("Finished");
	}

	private static class Parent {

		@Override public void finalize() throws Throwable {
			System.out.println("Parent finalize");
		}
	}

	private static class Child extends Parent {


	}
}




Parent finalize в таком варианте вызывается. Похоже меня обманули с пунктом 4 или я как-то его не так понял.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720587
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
вы что.думаете что написав runFinalization сборщик мусора начнет анализ всех доступных объектов а потом вызовет у них метод финализатора?
финализатор это простой способ защиты от дурака - если пр-ст забыл построить конструкцию closeable , последний довод короля передтем как объект
попадет в рай или сдохнет
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720596
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиquestioner,
вы что.думаете что написав runFinalization сборщик мусора начнет анализ всех доступных объектов а потом вызовет у них метод финализатора?
финализатор это простой способ защиты от дурака - если пр-ст забыл построить конструкцию closeable , последний довод короля передтем как объект
попадет в рай или сдохнет

Ну ок. runFinalization получается говорит, что сделай следующие финализации в новом потоке?
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720828
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Ты работал с JNI ?
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720855
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЖду исправлений, добавлений.
Причина простая - непредсказуемость. Что бы предсказать, нужно учесть все тонкости работы GC и JVM. Но этого никто не знает (даже среди разработчиков JVM, ибо разные куски пилят).

Ну а всякое замедление, это так, для "академической полноты". Любят западные деятели в околопрограммистских кругах казаться "умными", но что такое "умный" в понимании среднего пейсателя на машинном языке? Это как раз перец, способный с умным видом перечислить элементы списка с присвоением им номеров. Ну так их учили, так они привыкли. Поэтому тупо перечисляют всё, что в башку приходит. А выделить главное - ну извините, этому не учили.

А так вообще ради страховки на предмет "не могу всё предусмотреть" можно в finalize засовывать дублирование освобождения ресурсов. А можно просто мониторить утечки и находить то, что не предусмотрел.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720856
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы работал с JNI ?
А тебе это зачем? Укажи связь с сабжем.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720943
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совершенно не нужно знать все тонкости, от релиза к релизу убощики меняются, на примере дотнета - начали с дистрофика, а в последних релизах
уже полноценный многопоточный шварцнейгер, можно ведь его просто отключить как суть, и рабоать без него самим следить за кучей.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39720955
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В девятке - deprecated.

Там же описано на что заменять. Поэтому для собеседования вопрос морально устарел и имеет интерес чисто археологический.

Ну а JNI просто в тему управления освобождением ресурсов которые вы подключили как native обёрткой но забыли контролировать явное удаление. Разумеется для старых jdk.
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39721022
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerПочитал материала на тему С разморозкой .
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39721601
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу а JNI просто в тему управления освобождением ресурсов которые вы подключили как native обёрткой но забыли контролировать явное удаление. Разумеется для старых jdk.
Для JNI есть набор ограничений на нативную сторону. Если набор выполняется, то Java-сторона ведёт себя как привыкла, то есть не думает о ресурсах более, чем обычно. В этом суть специализированного нативного вызова - сделать его обычным для Java.

А почему только для старых jdk?
...
Рейтинг: 0 / 0
Что плохого в finalize?
    #39721634
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovquestionerПочитал материала на тему С разморозкой .

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


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