Для чего нужен метод finalize

Помечено: 

  • В этой теме 0 ответов, 1 участник, последнее обновление 4 месяца, 4 недели назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6183
      @admin

      Задача
      Освободить ресурсы перед удалением объекта из памяти

      Решение
      Язык Java использует автоматический сборщик мусора для освобожения памяти от неиспользуемых объектов. Если рассматривать данный механизм упрощенно, то объект может быть удален сборщиком мусора, если на объект не указывают ссылки в памяти.

      В Java предусмотрен механизм финализации, т.е. выполнение определенных действий перед удалением объекта сборщиком мусора. Данные действия могут потребоваться для освобождения каких-либо ресурсов, например, файлов или сетевых соединений. Финализация достигается за счет реализации метода finalize:

      protected void finalize(){
        
      }

      Данный метод является защищенным (protected) в базовом классе java.lang.Object. В нашем классе мы переопределяем данный метод и выполняем необходимые действия. В примере ниже происходит освобождение некоторого ресурса.

      public class ExampleClass{
       
        private MyResource myRes;
       
        protected void finalize(){
            if (null != myRes){
                myRes.close();
            }
        }
      }

      Отметим, что не известно когда будет запущен сборщик мусора и будет ли он запущен вообще в ходе выполнения программы, поэтому соответственно нет никаких гарантий запуска метода finalize

      В отличие от конструкторов не происходит неявного вызова метода предка (суперкласса) , поэтому при необходимости следует вызывать finalize метод предка явным образом

      protected void finalize(){
          if (null != myRes){
              myRes.close();
          }  
       
          super.finilize();
      }

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.