Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/68: Рейтинг темы: голосов - 68, средняя оценка - 4.57
 Аватар для EgorkakBE
0 / 0 / 0
Регистрация: 16.03.2011
Сообщений: 24

Деструктор JAVA

04.08.2011, 20:19. Показов 12865. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток УВАЖАЕМЫЕ!
Метод finalize() аналогичен деструктору в C++!

JAVA начал учить недавно, не могу разобраться. Как его реализовать этот метод?
К примеру вот код на C++ :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class test
{
public:
      //.........
      test()
          {
            //......   
          }
       ~test()
          {
            //.......
          } 
};
Нужен аналог "~test(){}".
Был бы признателен если бы кто нибудь привел наглядный кусочек кода.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2011, 20:19
Ответы с готовыми решениями:

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ?
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN я не понятно, это исключительно...

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...

При работе JVM обвалвается java c кодом Java Result 1073807364.
При работе JVM обвалвается java c кодом Java Result 1073807364. Если кто-нибудь знает, помогите пожалуйста.

16
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
05.08.2011, 16:42
Цитата Сообщение от EgorkakBE Посмотреть сообщение
Доброго времени суток УВАЖАЕМЫЕ!
Метод finalize() аналогичен деструктору в C++!
Сразу - НЕТ, finalize НЕ аналогичен деструктору. Использовать его можно только очень хорошо понимая, зачем Вы это делаете. Иначе Вы рискуете нарваться на падение производительности и проблемы с памятью.

Вопрос на засыпку: для чего Вам деструктор? Что уничтожать будете?
2
 Аватар для EgorkakBE
0 / 0 / 0
Регистрация: 16.03.2011
Сообщений: 24
08.08.2011, 01:33  [ТС]
Спасибо за совет, но пока что Я только учусь и поэтому на будущее хочу знать как вызвать деструктор?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
08.08.2011, 13:29
EgorkakBE, во всех языках, которые поддерживают автоматическую сборку мусора, нет необходимости описания и вызова деструктора вручную(кроме очень редких случаев), GC сам определит вид этого деструктора и вызовет его когда надо. Можете считать, что у класса всегда есть деструктор по умолчанию.
1
 Аватар для EgorkakBE
0 / 0 / 0
Регистрация: 16.03.2011
Сообщений: 24
08.08.2011, 15:00  [ТС]
Буду курить ман по сборщику мусора
Спасибо....
0
 Аватар для EgorkakBE
0 / 0 / 0
Регистрация: 16.03.2011
Сообщений: 24
10.08.2011, 16:36  [ТС]
Волшебство просто нет слов...
Какая же полезная вещь...
Сборщик мусора, который смотрит на все объекты, которые были созданы с помощью new, и если на них больше нигде нет ссылок, соответственно удаляет ненужное!!!
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 4
02.03.2013, 12:19
Доброго времени суток.
Переучиваюсь с плюсов на джаву.
Возникла задача: веб приложение использует информацию, считанную с некоторого файла xml. Соответственно перезапись информации в файл после каждой модификации не самое правильное решение, поэтому нужно хранить информацию в памяти и выгружать при закрытии веб сервера.
В плюсах ответ очевиден - метод выгрузки должен находится в деструкторе. Как этот вопрос решается в java?
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.03.2013, 13:59
Цитата Сообщение от bojiod9i Посмотреть сообщение
Доброго времени суток.
Переучиваюсь с плюсов на джаву.
Возникла задача: веб приложение использует информацию, считанную с некоторого файла xml. Соответственно перезапись информации в файл после каждой модификации не самое правильное решение, поэтому нужно хранить информацию в памяти и выгружать при закрытии веб сервера.
В плюсах ответ очевиден - метод выгрузки должен находится в деструкторе. Как этот вопрос решается в java?

если у вас приложение с использованием менеджт бинов - можно сделать метод и анатировать его @PreDestroy (кажется так). он будет вызываться перед выгрузкой объекта бина из контейнера. но я думаю не нужно говорить что бин должен иметь апликейшен скоуп

если приложение зиждется на сервлетах - там есть замечательный метод destroy() который вызывается, опять же, перед выгрузкой сервлета из контейнера

а про деструкторы в джаве забудьте
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
04.03.2013, 11:42
Цитата Сообщение от bojiod9i Посмотреть сообщение
Соответственно перезапись информации в файл после каждой модификации не самое правильное решение, поэтому нужно хранить информацию в памяти и выгружать при закрытии веб сервера.
Как Вы думаете - а сколько времени может работать web-сервер? И сколько информации Вы будете держать в памяти до "закрытия сервера" и предполагаемого момента выгрузки? И не сожрете ли Вы таким образом всю доступную память (ввиду правильного ответа на первый вопрос)?
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 4
10.03.2013, 18:42
Цитата Сообщение от Skipy Посмотреть сообщение
Как Вы думаете - а сколько времени может работать web-сервер? И сколько информации Вы будете держать в памяти до "закрытия сервера" и предполагаемого момента выгрузки? И не сожрете ли Вы таким образом всю доступную память (ввиду правильного ответа на первый вопрос)?
Вы правы, но проект был учебным и по заданию я должен был хранить некоторые данные в xml.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
03.04.2013, 17:47
Цитата Сообщение от Skipy Посмотреть сообщение
Вопрос на засыпку: для чего Вам деструктор?
Очевидно же, что не просто, чтобы его определить.
Цитата Сообщение от Skipy Посмотреть сообщение
Использовать его можно только очень хорошо понимая, зачем Вы это делаете.
Не совсем с Вами согласен. Для освобождения ресурсов, например.
Цитата Сообщение от Skipy Посмотреть сообщение
Иначе Вы рискуете нарваться на падение производительности и проблемы с памятью.
Согласен, но и без него никак. Да и сборщик мусора сам неэффективно работает.

Добавлено через 2 минуты
Цитата Сообщение от Skipy Посмотреть сообщение
Как Вы думаете - а сколько времени может работать web-сервер? И сколько информации Вы будете держать в памяти до "закрытия сервера" и предполагаемого момента выгрузки? И не сожрете ли Вы таким образом всю доступную память (ввиду правильного ответа на первый вопрос)?
Я так понимаю, что данные каким-то образом устаревают и удаляются. Иначе при новом запуске сервера и попытке считать данные из файла просто не хватит памяти.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
04.04.2013, 02:20
Цитата Сообщение от go Посмотреть сообщение
Да и сборщик мусора сам неэффективно работает.
вот это для меня новость )))
доказательства в студию
и да может я ещё не пулял сюда - Java FAQ: для тех кто знает (учил) С/С++
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
04.04.2013, 10:35
Цитата Сообщение от mutagen Посмотреть сообщение
вот это для меня новость )))
Когда заканчивается память запускается сборщик мусора, прерывая выполнение программы. Даже когда есть сборщик мусора, нам нужен детерминированный вызов деструктора. Добавление в класс финализатора(C#) очень сильно губит производительность(ссылка на такой объект помещается в специальную очередь). В общем система со сборкой мусора обычно имеет меньшую эффективность как по объему свободной памяти, так и по скорости. Да и низкоуровневые алгоритмы реализуются(требующие напрямую возможность работы с памятью) реализуются сложнее.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
04.04.2013, 11:05
Цитата Сообщение от go Посмотреть сообщение
Когда заканчивается память запускается сборщик мусора, прерывая выполнение программы.
В реалии всё совсем не так, у GC свой отдельный поток и вашу программу он совершенно не касается, мало того он срабатывает не
Цитата Сообщение от go Посмотреть сообщение
Когда заканчивается память
а по специальной стратегии, памяти может быть ещё очень дофига но коллектор мусор убирает так как цикл жизни объекта в куче подошёл к концу.
Кроме того существует несколько разных коллекторов, которые можно задавать при старте JVM и все они работают по разлным алгоритмам сбора, вы просто выбираете такой какой нужен вашему приложению. Мало того админ может специальным ключём JVM отключить ручной вызов коллектора из кода позволив JVM самой решать когда делать уборку.

+ ко всему вышесказанному, ну удалили вы деструктором объект и что думаете сразу ваша память заюзывается, ничего подобного менеджер памяти ОС ещё будет раздумывать по своему алгоритму давать ли эту область или ещё подождать.

Подведём итог: да ява жрёт памяти много, но это уже давно не является проблемой производительности.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
04.04.2013, 11:43
Цитата Сообщение от mutagen Посмотреть сообщение
а по специальной стратегии, памяти может быть ещё очень дофига но коллектор мусор убирает так как цикл жизни объекта в куче подошёл к концу.
Каждый раз пересмотр всех ссылок? По-моему в .net(не серверные приложения) сборка мусора на основе поколений более выйгрышно смотрится.
Цитата Сообщение от mutagen Посмотреть сообщение
+ ко всему вышесказанному, ну удалили вы деструктором объект и что думаете сразу ваша память заюзывается, ничего подобного менеджер памяти ОС ещё будет раздумывать по своему алгоритму давать ли эту область или ещё подождать.
Представте, у вас в деструкторе происходит освобождение ресурсов, так вот, я сделал delete - ресурс освободился, память освободилось.
Если же сборщик мусора вызовет финализатор, то объект будет удален только при следующей сборке мусора.

А если ссылка на объект помещена в регистр(после сборки мусора мы получаем не валидную ссылку). Т.е. сборка мусора должна происходить в определенный момент. А это очень сложно.
Ну и много еще проблем(например, когда объекты друг на друга ссылаются).

В джаве, на сколько я помню, существует модель, где сборка мусора может происходить по квантам. В итоге мусора меньше, а среднее время работы программы больше(что очень критично для серверных программ, где большое число запросов).
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
04.04.2013, 12:19
освобождать ресурсы в finalize()... м... как бы так сказать... имхо за такое нужно отрывать руки по то место откуда они растут. это я тонко намекаю на грубую архитектурную ошибку

Цитата Сообщение от go Посмотреть сообщение
например, когда объекты друг на друга ссылаются
GC уже давно это разруливает. конечно же если мы имеем не запущенный макаронно-клинический случай

да, и я пожалуй оставлю это тут:
http://www.oracle.com/webfolde... index.html
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
04.04.2013, 13:06
Цитата Сообщение от go Посмотреть сообщение
сборка мусора на основе поколений более выйгрышно смотрится.
я же говорил что есть много разных сборщиков, в том числе и на основе поколений, вы можете выбирать на старте

Добавлено через 1 минуту
Цитата Сообщение от go Посмотреть сообщение
А если ссылка на объект помещена в регистр(после сборки мусора мы получаем не валидную ссылку).
Об этом прошу подробнее, как это она поместилась в "регистр" и при этом стала вдруг готовой для сборщика?
сборщик убирает только если нет жёстких ссылок, а в этом случае есть жёсткая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2013, 13:06
Помогаю со студенческими работами здесь

Хочу стать Java программистом, здесь есть Java программисты?
Здравствуйте, я хочу стать Ява программистом, если здесь есть Ява программисты, пж подскажите плюсы и мунусы профессии Ява программиста,...

Актуально ли изучать java сейчас по книге, где примеры в java 5?
Книга "Изучаем Java"Берт Бейтс, Кэтти Сьерра .До этого ничего не читал по java

Какие шаги предпринять для овладения java и какую среду java посоветуете?
Пока сть опыт по Visual С, Basic; Borland Delphi, CBuilder. Хочется и в java разбираться.

'fr.java': Ошибка #: 300 : method getObject(int) not found in class java.lang.String строка 33, символ 18
'fr.java': Ошибка #: 300 : method getObject(int) not found in class java.lang.String строка 33, символ 18

Ошибка /usr/java/bin/java not found
Ja postavil jre1.3.1-fci-i386.rpm na Linux RedHat7.3 v dir /usr/java/jre1.3.1 A potom instaliroval JBuilder7 v /opt/JBuilder7 I v...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru