Sobes.tech
Middle

Javaда finalize ыкмасы эмне?

sobes.tech AI

AIден жооп

finalize ыкмасы мусор чогултуучу (garbage collector) тарабынан чакырылат, ал объект толугу менен жок кылынгандан кийин.

Негизги учурлар:

  • Максат: Java эмес ресурстарын тазалоого мүмкүндүк берет (мисалы, файл дескрипторлорун жабуу, тармактык байланыштарды жабуу) объектти эс тутумдан алып салуудан мурун.
  • Ыйгарымсыздык: finalize чакырык кепилденбейт жана эч качан болбой калышы мүмкүн, эгер JVM ал объектти чогултуп жатканга чейин аяктап калса:
  • Иштөө ылдамдыгы: finalize колдонуу мусор чогултуунун ылдамдыгына терс таасирин тийгизиши мүмкүн:
  • Устарган: finalize ыкмасы устаралган деп саналат (Java 9дөн бери deprecated), анын кемчиликтери үчүн:

Альтернатива:

  • 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");

        // Мажбурлап мусор чогултууну чакыруу (гарантталган эмес)
        System.gc();
        Thread.sleep(100); // мусор чогултуучу үчүн убакыт беребиз
    }
}

Маанилүү: Java 9дөн баштап, finalize колдонуу жаңы класстар үчүн эскертүү көрсөтөт. Анын ордуна Cleaner же PhantomReference колдонуу сунушталат, бул ресурстарды көбүрөөк көзөмөлдөөгө мүмкүндүк берет.