Middle
Ի՞նչ է finalize մեթոդը Java-ում։
sobes.tech AI
Պատասխան AI-ից
Մեթոդը finalize կանչվում է աղբարկղի հավաքիչի (garbage collector) կողմից այն ժամանակ, երբ օբյեկտը ամբողջությամբ ոչնչացվելու է:
Հիմնական կետեր՝
- Նպատակը: Ինքնակատարում է ոչ-Java ռեսուրսների մաքրման գործընթացը (օրինակ՝ ֆայլային դեսկրիպտորների փակումը, ցանցային կապերը) օբյեկտի հիշողությունից հեռացման նախորդը:
- Անհավատալիություն:
finalizeկանչումը չի երաշխավորվում և կարող է չկատարվել ընդհանրապես, եթե JVM-ը ավարտվի նախքան օբյեկտի հավաքումը: - Արդյունավետություն:
finalizeօգտագործումը կարող է բացասաբար ազդել հավաքման գործընթացի արագության վրա: - Հնացածություն:
finalizeմեթոդը համարվում է հնացած (deprecated since Java 9) իր թերությունների պատճառով:
Ալտերնատիվներ՝
- Ռեսուրսների կառավարում
try-with-resourcesբանալի բառի միջոցով, որը կիրառվում էAutoCloseableինտերֆեյսը իրականացնող օբյեկտների համար: - Մասնագիտացված գրադարանների կամ մեխանիզմների օգտագործում, որոնք ապահովում են ավելի կանխատեսելի ռեսուրսների ազատում:
Օրինակ (դեմոնստրացիոն, չի խորհուրդ տրվում արտադրական օգտագործման համար):
class Resource {
private String name;
public Resource(String name) {
this.name = name;
System.out.println("Resource " + name + " ստեղծվեց.");
}
// Չի խորհուրդ տրվում իրական ծրագրերում օգտագործել
@Override
protected void finalize() throws Throwable {
try {
System.out.println("Ռեսուրսի ֆինալիզացիա " + name);
// Այստեղ պետք է լինի ռեսուրսների մաքրման լոգիկան, օրինակ՝ ֆայլի փակումը
} finally {
super.finalize(); // Կարևոր է կանչել super.finalize()
}
}
}
public class FinalizeExample {
public static void main(String[] args) throws InterruptedException {
new Resource("A");
new Resource("B");
// Ապ obligatory collection (չի երաշխավորվում)
System.gc();
Thread.sleep(100); // Տալ ժամանակ հավաքողին
}
}
Մნიშვნელավոր: Java 9-ից սկսած, finalize օգտագործումը նոր դասերի համար ցույց է տալիս նախազգուշացում։ Փոխարենը խորհուրդ է տրվում օգտագործել Cleaner կամ PhantomReference դասերը ավելի վերահսկվող ռեսուրսների մաքրում ապահովելու համար։