2011-12-20 2 views
0

Я хочу реализовать поведение объекта, аналогичного гарантированному finalize() на языке Java. Я хочу, чтобы некоторые операторы выполнялись перед сборкой мусора. Обратите внимание: блок finally здесь не полезен, поскольку он запускается сразу после блока try, что не является моим требованием. В основном я хочу сериализовать объект непосредственно перед его выгрузкой из кучи JVM. Пожалуйста, порекомендуйте.Как реализовать гарантированное завершение поведения объекта

+2

Внедрите метод close(). Обсуждение здесь http://stackoverflow.com/questions/158174/why-would-you-ever-implement-finalize –

+0

Да, так как я понимаю, что это близко() - это последний удар по дороге вниз. –

ответ

0

Вы можете добавить крюк в JVM при выключении; см. http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29

Вместе с фантомами от пользователя @ user949300, которые кажутся работоспособными. Однако крючок должен хранить слабые ссылки на все объекты. Если вы создаете java-сервисный интерфейс для hook, вы можете использовать его в конструкторах объектов. Но уродливый не так ли?

1

Невозможно реализовать метод finalize(), который будет выполнен независимо от того, что, потому что JVM не гарантирует его называть. Например, объекты, оставленные в куче при выходе из вашей программы, никогда не будут иметь вызванный метод finalize(), в зависимости от текущей JVM.

Как правило, не рекомендуется использовать finalize() для освобождения любых ресурсов, кроме памяти, а тем более для того, чтобы освобождать ресурсы. Если вы хотите сериализовать свои объекты, попробуйте выбрать другой момент времени.

Существует good article, в котором представлены почти все, что вам нужно знать о финализаторах.

0

Я никогда не пользовался Phantom Reference (звучит как один из плохих фильмов о Звездных войнах), но похоже, что это может сделать трюк.

«Объекты ссылки Phantom, которые находятся в очереди после сбора, определяют, что их референты могут быть повторно восстановлены. Фантомные ссылки чаще всего используются для планирования действий по предотвращению вскрытия более гибким способом, чем это возможно при завершении Java механизм "

+0

Отличное предложение, действительно решило мою проблему. Это, безусловно, одна из лучших статей на Phantom reference Objects [http://www.pawlan.com/monica/articles/refobjs/] – sij

+0

Спасибо за ссылку - хорошо выглядит. – user949300

Смежные вопросы