Sobes.tech
Junior

Miks on oluline Java-s ressursse sulgeda?

sobes.tech AI

Vastus AI-lt

Oluline on sulgeda ressursid (faili voogud, võrgusokid, andmebaasi ühendused jne) mitmel põhjusel:

  • Ressursside lekkimise ennetamine: Sulgemata ressursid jäävad mälu või operatsioonisüsteemi, neid ei saa kasutada teised osad rakendusest või süsteemist. Aja jooksul võib see viia süsteemiresursside (mälu, failide kirjeldajad) ammendumiseni, töö aeglustumiseni või tõrgeteni.
  • Süsteemiresursside vabastamine: Ressursi sulgemine vabastab sellega seotud süsteemiresurssid, võimaldades neid kasutada teistel protsessidel.
  • Operatsioonide õige lõpetamine: Mõned ressursitega seotud toimingud (näiteks kirjutamine faili) ei pruugi täielikult lõppeda enne, kui ressurss on selgelt suletud (näiteks buferiseeritud andmed ei ole kettale kirjutatud).
  • Võrguühendused: Sulgemata võrguside võivad hoida porte ja tarbida ressursse mõlemas otsas.
  • Andmebaasi ühendused: Sulgemata ühendused võivad kiiresti ära kasutada ühenduste paki ja põhjustada teenusekatkestuse teiste osade jaoks.

Ressursside usaldusväärseks sulgemiseks soovitatakse kasutada try-with-resources konstruktsiooni (alates Java 7):

// Näide try-with-resources kasutamisest
try (java.io.FileInputStream fis = new java.io.FileInputStream("file.txt")) {
    // Failist lugemine
} catch (java.io.IOException e) {
    // Erandi töötlemine
} // fis ressurss suletakse automaatselt

Kui try-with-resources ei ole saadaval (näiteks vanas koodis või teekides, mis ei rakenda AutoCloseable liidest), tuleb kasutada finally plokki:

// Näide finally ploki kasutamisest
java.io.FileInputStream fis = null;
try {
    fis = new java.io.FileInputStream("file.txt");
    // Failist lugemine
} catch (java.io.IOException e) {
    // Erandi töötlemine
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (java.io.IOException e) {
            // Vea töötlemine sulgemisel
        }
    }
}

Try-with-resources kasutamine on parem, kuna see on lühem ja tagab ressursi sulgemise ka erandite korral.