Sobes.tech
Middle

Mis on finalize meetod Java-s

sobes.tech AI

Vastus AI-lt

finalize meetod kutsutakse prügi kogujal (garbage collector) enne, kui objekt täielikult hävitatakse.

Peamised punktid:

  • Eesmärk: võimaldab teha puhastust mitte-Java ressurssidele (näiteks sulgeda failide kirjeldajaid, võrguliine) enne objekti eemaldamist mälust.
  • Usaldusväärsus: finalize kutsumine ei ole garanteeritud ja võib üldse mitte toimuda, kui JVM lõpetab enne, kui objekt on kogutud.
  • Jõudlus: finalize kasutamine võib negatiivselt mõjutada prügikogumise jõudlust.
  • Ajalukku minek: finalize meetod on vananenud (deprecated since Java 9) oma puuduste tõttu. Selle asemel soovitatakse kasutada teisi mehhanisme ressursside haldamiseks.

Alternatiivid:

  • Ressursside haldamine try-with-resources võtmesõnaga, mis kehtib AutoCloseable liidese rakendanud objektidele.
  • Spetsialiseeritud teekide või mehhanismide kasutamine, mis tagavad ressursiteenuse parema kontrolli.

Näide (demonstratiivne, ei soovitata tootmiskasutuseks):

class Resource {
    private String name;

    public Resource(String name) {
        this.name = name;
        System.out.println("Resurss " + name + " loodud.");
    }

    // Ei soovitata kasutada reaalsetes rakendustes
    @Override
    protected void finalize() throws Throwable {
        try {
            System.out.println("Resurssi finaliseerimine " + name);
            // Siin peaks olema ressursside puhastamise loogika, nt faili sulgemine
        } finally {
            super.finalize(); // Oluline on kutsuda super.finalize()
        }
    }
}

public class FinalizeExample {
    public static void main(String[] args) throws InterruptedException {
        new Resource("A");
        new Resource("B");

        // Sunni prügikogumine (ei ole garanteeritud)
        System.gc();
        Thread.sleep(100); // Annab aega prügikogujale
    }
}

Oluline: Alates Java 9-st annab finalize kasutamine uutele klassidele kompilaatorile hoiatuse. Selle asemel soovitatakse kasutada Cleaner või PhantomReference klasse parema kontrolli saavutamiseks ressursside puhastamisel.