Middle
Java-da finalize metodu nədir?
sobes.tech Süni İntellekt
AI-dan cavab
finalize metodu, obyekt tam to'planmasidan oldin, garbage collector (axirgi tozalovchi) tomonidan chaqiriladi.
Asosiy nuqtalar:
- Maqsad: Ob'ekt xotiradan o'chirilishidan oldin, Java tashqarisidagi resurslarni (masalan, fayl deskriptorlarini yopish, tarmoq ulanishlarini yopish) tozalash imkonini beradi.
- Noto'g'riligi:
finalizechaqirilishi kafolatlanmagan va umuman bo'lmasligi mumkin, agar JVM ob'ekt to'planishidan oldin tugasa. Turli ob'ektlar uchun chaqirish tartibi ham kafolatlanmagan. - Ishlash tezligi:
finalizefoydalanish garbage collection'ning ishlashiga salbiy ta'sir qilishi mumkin. - Qadimgiligi:
finalizeJava 9 dan boshlab eskirgan (deprecated) va uning kamchiliklari sababli tavsiya etilmaydi. Buning o'rniga, resurslarni boshqarish uchun boshqa mexanizmlardan foydalanish tavsiya etiladi.
Alternativlar:
AutoCloseableinterfeysini amalga oshiradigan ob'ektlar uchuntry-with-resourceskalit so'zi bilan resurslarni boshqarish.- Resurslarni yanada prognozli ravishda bo'shatadigan maxsus kutubxonalar yoki mexanizmlar.
Misol (demonstratsiya, ishlab chiqarish uchun tavsiya etilmaydi):
class Resource {
private String name;
public Resource(String name) {
this.name = name;
System.out.println("Resurs " + name + " yaratildi.");
}
// Haqiqiy ilovalarda foydalanish tavsiya etilmaydi
@Override
protected void finalize() throws Throwable {
try {
System.out.println("Resursni yakunlash " + name);
// Bu yerda resurslarni tozalash logikasi bo'lishi kerak, masalan, faylni yopish
} finally {
super.finalize(); // finalize superklassining chaqirilishi muhim
}
}
}
public class FinalizeExample {
public static void main(String[] args) throws InterruptedException {
new Resource("A");
new Resource("B");
// Garbage collection'ni majburlash (garantlanmagan)
System.gc();
Thread.sleep(100); // Garbage collector uchun vaqt berish
}
}
Muhim: Java 9 dan boshlab, yangi sinflar uchun finalize foydalanish kompilator ogohlantirishini keltirib chiqaradi. Buning o'rniga, Cleaner yoki PhantomReference kabi mexanizmlardan foydalanish tavsiya etiladi.