logo

Java Destroyer

У Java, коли ми створюємо об’єкт класу, він займає деякий простір у пам’яті (купі). Якщо ми не видалимо ці об’єкти, вони залишаться в пам’яті та займатимуть непотрібний простір, який не є вертикальним з точки зору програмування. Щоб вирішити цю проблему, ми використовуємо руйнівник . У цьому розділі ми обговоримо альтернативний варіант деструктор в Java . Крім того, ми також навчимося використовувати завершити() метод як деструктор.

The руйнівник є протилежністю конструктору. Конструктор використовується для ініціалізації об’єктів, тоді як деструктор використовується для видалення або знищення об’єкта, який звільняє ресурс, зайнятий об’єктом.

Пам'ятайте, що в Java немає концепції деструктора . Замість деструктора Java надає збирач сміття, який працює так само, як і деструктор. Збирач сміття — це програма (потік), яка виконується на JVM . Він автоматично видаляє невикористовувані об’єкти (об’єкти, які більше не використовуються) і звільняє пам’ять. Програмісту не потрібно керувати пам'яттю вручну. Він може бути схильний до помилок, уразливий і може призвести до витоку пам’яті.

Що таке деструктор в Java?

Це спеціальний метод, який автоматично викликається, коли об’єкт більше не використовується. Коли об’єкт завершує свій життєвий цикл, збирач сміття видаляє цей об’єкт і звільняє або звільняє пам’ять, зайняту об’єктом.

Він також відомий як фіналізатори які є недетермінованими. в Java , виділення та зняття об’єктів, якими керує збирач сміття . Виклик фіналізаторів не гарантується, оскільки він викликається неявно.

Переваги деструктора

  • Це звільняє ресурси, зайняті об'єктом.
  • Явний виклик не потрібен, він автоматично викликається в кінці виконання програми.
  • Він не приймає жодних параметрів і не може бути перевантажений.

Як працює деструктор?

Коли об’єкт створюється, він займає простір у купі. Ці об’єкти використовуються потоками. Якщо об’єкти більше не використовуються потоком, вони стають придатними для збирання сміття. Пам'ять, яку займає цей об'єкт, тепер доступна для нових об'єктів, які створюються. Слід зазначити, що коли збирач сміття знищує об’єкт, JRE викликає метод finalize(), щоб закрити з’єднання, наприклад з’єднання з базою даних і мережею.

Зі сказаного вище можна зробити висновок, що використання деструктора і збирача сміття є рівнем втручання розробника в управління пам'яттю. Це головна відмінність між ними. Деструктор повідомляє, коли саме об'єкт буде знищено. Тоді як у Java збирач сміття виконує ту саму роботу автоматично. Ці два підходи до управління пам’яттю мають позитивний і негативний ефект. Але головна проблема полягає в тому, що іноді розробнику потрібен негайний доступ до керування пам’яттю.

Метод Java finalize().

Програмісту важко примусово запустити збирач сміття, щоб знищити об’єкт. Але Java пропонує альтернативний спосіб зробити те саме. Клас Java Object надає завершити() метод, який працює так само, як і деструктор. Синтаксис методу finalize() такий:

Синтаксис:

 protected void finalize throws Throwable() { //resources to be close } 

Це не деструктор, але забезпечує додатковий захист. Він забезпечує використання зовнішніх ресурсів, таких як закриття файлу тощо перед завершенням роботи програми. Ми можемо викликати його, використовуючи сам метод або викликаючи метод System.runFinalizersOnExit(true) .

  • Це захищений метод класу Object, який визначено в пакеті java.lang.
  • Його можна викликати лише один раз.
  • Нам потрібно явно викликати метод finalize(), якщо ми хочемо перевизначити метод.
  • gc() — це метод JVM, що виконується Garbage Collector. Він викликається, коли пам'ять купи заповнена і вимагає більше пам'яті для нових об'єктів.
  • За винятком неперевірених винятків, JVM ігнорує всі винятки, які виникають методом finalize().

Приклад деструктора

DestructorExample.java

 public class DestructorExample { public static void main(String[] args) { DestructorExample de = new DestructorExample (); de.finalize(); de = null; System.gc(); System.out.println('Inside the main() method'); } protected void finalize() { System.out.println('Object is destroyed by the Garbage Collector'); } } 

Вихід:

 Object is destroyed by the Garbage Collector Inside the main() method Object is destroyed by the Garbage Collector