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.