Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1

finalize()

22.12.2013, 07:15. Показов 1985. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот во многих местах инета натыкаюсь на такой совет типа: "финализаторы это плохо", "финализаторы - это зло",
"финализаторы - нигде не применяются", "Если у тебя в коде есть кое что, что связано с финализаторами, то ты индюк" и т.д. Так если он не нужен - зачем его сделали? Где его реальное применение? И насколько правы интернет сообщество насчет финализаторов?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2013, 07:15
Ответы с готовыми решениями:

Finalize()
Всем привет! Хочу поговорить про этот метод и задать несколько вопросов. На сколько мне известно, данный метод всегда вызывается...

Finalize не вызывается
public class Main { public static void main(String args) { A a = new A(); WeakReference<A> weakReference =...

Переопределить to string() и finalize()
Здравствуйте! Я новичок в программировании на Java. Да и в программировании несильна) Вот код программы: import static...

7
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
23.12.2013, 11:09
Есть java, а есть ассемблер. На java создать окно - вызвать один метод. На ассемблере надо сильно покрутиться. На ассемблере прострелить себе ногу - пара пустяков. На java - надо постараться. И зачем сделали ассемблер?

А сделали его затем, что опытным людям, которые точно знают, что они делают, ассемблер открывает существенно бОльшие возможности. Ключевая часть фразы - "точно знают, что они делают".

Вопрос. Сколько в процентном отношении Вы знаете разработчиков Java, которые точно знают, что они делают? И сколько из оставшихся успело прострелить себе ногу из finalize? А сколько об этом только слышали, но уже успели испугаться и ярлыков навешать?
1
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
23.12.2013, 15:15  [ТС]
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
Где его реальное применение?
И все же где его реальное применение, только ли GC?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
23.12.2013, 15:17
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
И все же где его реальное применение, только ли GC?
Странный вопрос, учитывая что finalize вызывается во время GC...
1
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
24.12.2013, 10:38  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Странный вопрос, учитывая что finalize вызывается во время GC...
Т.е. finalize() нигде кроме как GC не используется?
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
24.12.2013, 11:26
На самом деле, если прочитать абзац отсюда http://developer.android.com/r... bject.html (в самом низу страницы), становится все понятно.
Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.
1
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
25.12.2013, 20:49
Почему рекомендуется создавать медот close() вместо финализатора для освобождения ресурсов? Прогер может завтыкать или полениться его вызвать, а finalize() гарантировано будет выполнен перед разрушением объекта.

Добавлено через 4 минуты
Я в смысле, закрыть файл, соединение, например. С удалением объектов пусть GC разберется.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
26.12.2013, 11:11
Цитата Сообщение от MLPMan Посмотреть сообщение
finalize() гарантировано будет выполнен перед разрушением объекта.
Кто сказал, что гарантированно? Во-первых, finаlize не вызывается, когда JVM прекращает работу. Во-вторых, если finalize вызвался один раз, а в нем восстановилась ссылка на объект - второй раз он гарантированно НЕ вызовется.

В третьих, процедура сбора объектов, у которых переопределен finalize, отличается от стандартной. Она сильно медленнее. И потому гораздо эффективнее ресурсы освобождать руками. Исключение составляют ситуации, когда освободить надо гарантированно, процедура редкая, а при окончании работы JVM можно не дергаться. Типа закрытия сокетов, освобождения памяти, полученной в обход кучи, и т.п.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2013, 11:11
Помогаю со студенческими работами здесь

Как устроен метод finalize()
public class Book { boolean checkedOut = false; Book(boolean checkOut){ checkedOut = checkOut; } void checkIn(){ ...

Чем отличаются finalize() и dispose()?
чем отличаются finalize() и dispose() ?

Работа с Office, Finalize() и Dispose()
Здравствуйте. Насколько понимаю, работа в С# c MS Office идет через не управляемые ссылки, так использыется для этого библиотека...

Разница между Dispose и Finalize
Если на собеседовании меня спросят какая разница между Dispose и Finalize что ответить? Честно говоря я не до конца понял что это.

Порядок выполнения Finalize и внутренние объекты
Доброго времени суток! Есть класс(не static), в классе определенно static поле - ссылка на другой объект(внутренний объект)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru