powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Возможен ли диструктор в Java. (finalize())
21 сообщений из 21, страница 1 из 1
Возможен ли диструктор в Java. (finalize())
    #33641040
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько мне измесно менеджер кучи удаляет объект(с вызовам метода finalize()) из памяти по мере необходимости в памяти (т.е. не сразу при потере ссылки на объект, алишь тогда когда нехвотает памяти для создания друвого объекта).
Можно ли как нибудь сказать компилятору об том что при утрате всех ссылок на объект удалять его и запускать какойнибудь метод.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641208
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не когда необходимость в памяти, а по расписанию
System.gc()
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641210
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysmanxНа сколько мне измесно менеджер кучи удаляет объект(с вызовам метода finalize()) из памяти по мере необходимости в памяти (т.е. не сразу при потере ссылки на объект, алишь тогда когда нехвотает памяти для создания друвого объекта).
Можно ли как нибудь сказать компилятору об том что при утрате всех ссылок на объект удалять его и запускать какойнибудь метод.
А зачем? Определи явно метод вроде dispose и запускай его сам. Извраты со сборщиком мусора не поощряются.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641217
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naugне когда необходимость в памяти, а по расписанию
System.gc()
Зависит от модели сбоорки мусора... есть и по расписанию, и при возникновении необходимости в памяти...
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641228
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийА зачем? Определи явно метод вроде dispose и запускай его сам. Извраты со сборщиком мусора не поощряются.
Удобно очень удобно.
аналогом деструктора является блок finally. Посмотри как часто ты пишеш этот оператор в программе аналогом его в С++ является деструктор, причем он пишется\ один раз при декларировании в java при каждом использовании нужно дернуть dispose
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641323
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин ЗашедшийА зачем? Определи явно метод вроде dispose и запускай его сам. Извраты со сборщиком мусора не поощряются.
Удобно очень удобно.
аналогом деструктора является блок finally. Посмотри как часто ты пишеш этот оператор в программе аналогом его в С++ является деструктор, причем он пишется\ один раз при декларировании в java при каждом использовании нужно дернуть dispose
Задолбаешься делать семантику значений для всех классов в программе. Если без семантики значений - то придется размещать в куче. Это тянет с собой смарт-указатели, которые размещают в куче дополнительный блок для счетчика ссылок и кроме того должны как-то считать эти ссылки эффективно в однопоточной среде и безопасно в многопоточной.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641394
sysmanxНа сколько мне измесно менеджер кучи удаляет объект(с вызовам метода finalize()) из памяти по мере необходимости в памяти (т.е. не сразу при потере ссылки на объект, алишь тогда когда нехвотает памяти для создания друвого объекта).
Можно ли как нибудь сказать компилятору об том что при утрате всех ссылок на объект удалять его и запускать какойнибудь метод.Тебе для чего это? Пишешь под J2ME? Прога тормозит? Или J2SE память за 300Мб жрет? Так перепиши ее чтоб не жрала.

Ты не с той стороны начинаешь программировать на жаве, ерундой не занимайся. Или возвращайся на свой цпп
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641463
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин ЗашедшийА зачем? Определи явно метод вроде dispose и запускай его сам. Извраты со сборщиком мусора не поощряются.
Удобно очень удобно.
аналогом деструктора является блок finally. Посмотри как часто ты пишеш этот оператор в программе аналогом его в С++ является деструктор, причем он пишется\ один раз при декларировании в java при каждом использовании нужно дернуть dispose
В большинстве случаев никакие деструкторы в Яве просто не нужны, все само разрушится как надо. Деструкторы надо применять только при запросах внешних ресурсов - коннектах к базе данных, к потоку файлового ввода-вывода и тыпы. Если таких объектов в софтине больше, чем пальцев на одной руке - на 99% проблема в кривой архитектуре.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641483
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to диструктор:
диструктор sysmanxНа сколько мне измесно менеджер кучи удаляет объект(с вызовам метода finalize()) из памяти по мере необходимости в памяти (т.е. не сразу при потере ссылки на объект, алишь тогда когда нехвотает памяти для создания друвого объекта).
Можно ли как нибудь сказать компилятору об том что при утрате всех ссылок на объект удалять его и запускать какойнибудь метод.Тебе для чего это? Пишешь под J2ME? Прога тормозит? Или J2SE память за 300Мб жрет? Так перепиши ее чтоб не жрала.

Ты не с той стороны начинаешь программировать на жаве, ерундой не занимайся. Или возвращайся на свой цпп

Просто так, конкретной задачи нет , но интересно почему не реализовали такую вазможность на таком мощном языке, а может я просто незнаю и хочю узнать.

to All:

Вот например ктонибудь знает как работает распределитель памяти по объекты:
я предполагаю что гдето храница список указателей ссылающися на объект, а при присвоению одному из указателей null (или друвого объекта), он удаляется из этого списка. Если это так то почемубы не запускать деструктор автоматически при последнем удалении указателя из списка (список станововится пустой).
Я прав в догадках или нет?
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641495
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори диструктор :)

to Зашедший.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641516
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сборка мусора живёт в отдельном треди и время от времени смотрит нужна ли уборка. А отдельный листенер на каждый евент изменения ссылки вешать это позамороченней будет
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641598
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysmanxВот например ктонибудь знает как работает распределитель памяти по объекты:
я предполагаю что гдето храница список указателей ссылающися на объект, а при присвоению одному из указателей null (или друвого объекта), он удаляется из этого списка. Если это так то почемубы не запускать деструктор автоматически при последнем удалении указателя из списка (список станововится пустой).
Я прав в догадках или нет?
У Дональда Кнута в первой книжке приведен алгоритм, который без привлечения доп. памяти трассирует все ссылки в произвольном графе, и отслоившиеся куски помечает как мусор.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641645
sysmanx, ты не прав и на счет того, "как работает распределитель памяти", и на счет finalize. Но ты прав в том, что использование деструкторов в C++ очень удобно тем, что они автоматически вызываются при потере контекста. Но Java не C++ и не все приемы программирования, пригодные для C++, к ней подходят. Равно как и наоборот.

Деструкторов в Java нет из-за того, что управление памятью сделано совершенно по-другому. И метод finalize это не замена деструкторов, он может вообще никогда не вызваться (сделай тестовый пример и увидишь).
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641657
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Ненавижу регистрацию.

Я знаю что finalize() не деструктор. Просто в данной теме хочю узнать можноли реализовать настоящий деструктор на Java.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641830
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysmanxto Ненавижу регистрацию.

Я знаю что finalize() не деструктор. Просто в данной теме хочю узнать можноли реализовать настоящий деструктор на Java.
"Настоящий" - нет ИМХО.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641858
sysmanxto Ненавижу регистрацию.

Я знаю что finalize() не деструктор. Просто в данной теме хочю узнать можноли реализовать настоящий деструктор на Java.
Давайте разберемся, что делает деструктор (в C++). Лично я припоминаю два случая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
//первый случай
{
    Class var;
} //при потере контекста вызывается деструктор для var


//второй случай
Class var* = new Class();
delete var; //вызывается деструктор
В Java автоматических переменных для объектов нет. Соответсвенно, первый случай отпал.
Второй случай мало чем отличается от вызова специального метода (например, close).

Приведите пример кода (на Java), в котором вы хотите иметь поведение настоящего деструктора.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33641897
sysmanx
Просто так, конкретной задачи нет , но интересно почему не реализовали такую вазможность на таком мощном языке, а может я просто незнаю и хочю узнать.
Если это так то почемубы не запускать деструктор автоматически при последнем удалении указателя из списка (список станововится пустой).
Я прав в догадках или нет?Не забивай голову, как раз потому что язык такой мощный, сборщик мусора работает очень сложно. Работает постоянно, в своем потоке, имеет 2 фазы, одна собирает мусор быстро, маложившие и быстросдохшие объекты, другая фаза запускается реже, работает дольше и собирает все умершие объекты, а долгоживущие перемещает в отдельную область памяти. Ну и т.д. и т.п. Тебе оно надо, сложностями голову забивать? За тебя и за меня уже все разработали умные дяди.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33642019
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненавижу регистрациюДавайте разберемся, что делает деструктор (в C++). Лично я припоминаю два случая:
Код: plaintext
1.
2.
3.
4.
//первый случай
{
    Class var;
} //при потере контекста вызывается деструктор для var
В Java автоматических переменных для объектов нет. Соответсвенно, первый случай отпал.
Приведите пример кода (на Java), в котором вы хотите иметь поведение настоящего деструктора.
Когда люди пишут что хотят иметь деструктор на java то имеют ввиду что им нужно поведение которе обеспечивает случай описанны тобой в первом варианте. А это обеспечивает блок java finally, т.е. то код который отработае влюбом случае при выходе из контекста кода. Это очень очень удобно то что в java достигается за счет констуркций языка например synhronized(object){...} в С++ реализуется за счет конструкторов и деструкторов.
Это надо знать и по другому писать программы.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33642075
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Ненавижу регистрацию:
Первый случай. При потере области видимости нужно освободить ресурсы.

to диструктор:
synhronized(object){...} - я понимаю блокирует объект для данного потока, пока данный поток не пройдёт критическую секцию({...}). Я прав?, и как он влияет на реализацию конструкторов и деструкторов?
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33642119
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysmanxto Ненавижу регистрацию:
Первый случай. При потере области видимости нужно освободить ресурсы.

1) Блок try-finally
2) Есть система Realtime Java (RTSJ), там чтобы избежать издержек на работу уборщика мусора и достичь гарантированных откликов есть Scoped куча - наверно там тоже что-то замутить можно.

sysmanx
to диструктор:
synhronized(object){...} - я понимаю блокирует объект для данного потока, пока данный поток не пройдёт критическую секцию({...}). Я прав?, и как он влияет на реализацию конструкторов и деструкторов?
Этот автор похоже не знает и С++ тоже.
...
Рейтинг: 0 / 0
Возможен ли диструктор в Java. (finalize())
    #33650792
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме System.gc() есть еще метод
System.runFinalization()


Код: plaintext
1.
Runs the finalization methods of any objects pending finalization.
Calling this method suggests that the Java Virtual Machine expend effort toward running the finalize methods of objects that have been found to be discarded but whose finalize methods have not yet been run. When control returns from the method call, the Java Virtual Machine has made a best effort to complete all outstanding finalizations.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Возможен ли диструктор в Java. (finalize())
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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