У Јави, када креирамо објекат класе, он заузима неки простор у меморији (хап). Ако ове објекте не избришемо, они остају у меморији и заузимају непотребан простор који није усправан са аспекта програмирања. Да бисмо решили овај проблем, користимо разарач . У овом одељку ћемо разговарати о алтернативној опцији деструктор у Јави . Такође, научићемо како да користимо финализе() метод као деструктор.
Тхе разарач је супротност конструктору. Конструктор се користи за иницијализацију објеката док се деструктор користи за брисање или уништавање објекта који ослобађа ресурс који објект заузима.
Запамтите да у Јави не постоји концепт деструктора . Уместо деструктора, Јава обезбеђује сакупљач смећа који ради исто као и деструктор. Сакупљач смећа је програм (нит) који се покреће на ЈВМ . Аутоматски брише некоришћене објекте (објекте који се више не користе) и ослобађа меморију. Програмер нема потребу да ручно управља меморијом. Може бити подложан грешкама, рањив и може довести до цурења меморије.
Шта је деструктор у Јави?
То је посебан метод који се аутоматски позива када се објекат више не користи. Када објекат заврши свој животни циклус, сакупљач смећа брише тај објекат и додељује или ослобађа меморију коју заузима објекат.
Такође је познато као финализатори који су недетерминистички. Ин Јава , алокацију и делокацију објеката којима рукује Ђубретар . Позивање финализатора није загарантовано јер се позива имплицитно.
Предности Деструцтор-а
- Он ослобађа ресурсе које заузима објекат.
- Није потребан експлицитни позив, он се аутоматски позива на крају извршавања програма.
- Не прихвата ниједан параметар и не може се преоптеретити.
Како функционише деструктор?
Када је објекат креиран, он заузима простор у хрпи. Ове објекте користе нити. Ако објекте више не користи нит, она постаје квалификована за сакупљање смећа. Меморија коју тај објекат заузима сада је доступна за нове објекте који се креирају. Примећено је да када сакупљач смећа уништи објекат, ЈРЕ позива метод финализе() да затвори везе као што су база података и мрежна веза.
Из наведеног можемо закључити да је коришћење деструктора и сакупљача смећа ниво уплитања програмера у управљање меморијом. То је главна разлика између њих двоје. Деструктор тачно обавештава када ће објекат бити уништен. Док у Јави сакупљач смећа обавља исти посао аутоматски. Ова два приступа управљању меморијом имају позитивне и негативне ефекте. Али главни проблем је што је понекад програмеру потребан тренутни приступ управљању меморијом.
Јава финализе() метода
Програмеру је тешко да насилно изврши сакупљач смећа да би уништио објекат. Али Јава пружа алтернативни начин да се уради исто. Класа Јава Објецт обезбеђује финализе() метод који ради исто као и деструктор. Синтакса методе финализе() је следећа:
Синтакса:
protected void finalize throws Throwable() { //resources to be close }
Није деструктор, али пружа додатну сигурност. Осигурава коришћење спољних ресурса као што је затварање датотеке, итд. пре искључивања програма. Можемо га позвати коришћењем самог метода или позивањем методе Систем.рунФинализерсОнЕкит(труе) .
- То је заштићени метод класе Објецт који је дефинисан у пакету јава.ланг.
- Може се позвати само једном.
- Морамо експлицитно да позовемо метод финализе() ако желимо да заменимо метод.
- Гц() је метода ЈВМ-а коју извршава сакупљач смећа. Позива се када је меморија гомиле пуна и захтева више меморије за нове пристигле објекте.
- Осим непроверених изузетака, ЈВМ игнорише све изузетке који се јављају методом финализе().
Пример деструктора
ДеструцторЕкампле.јава
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