Junior
რატომ არის მნიშვნელოვანი Java-ში რესურსების დახურვა?
sobes.tech AI
პასუხი AI-სგან
Мөһим — ресурстарды жабу (файл ағындары, желі сокеттері, дерекқор байланыстары және т.б.) бірнеше себептер бойынша:
- Ресурстардың ағып кетуін болдырмау: Жабылмаған ресурстар жадта немесе операциялық жүйеде қалады, басқа бөлімдер қолдана алмайды. Уақыт өте келе жүйелік ресурстардың (жад, файл дескрипторлары) таусылуына, жұмыс істеуінің баяулауына немесе ақауларға әкелуі мүмкін.
- Жүйелік ресурстарды босату: Ресурсты жабу оған байланысты жүйелік ресурстарды босатады, оларды басқа процестер пайдалана алады.
- Операцияларды дұрыс аяқтау: Кейбір ресурстармен жұмыс істеу операциялары (мысалы, файлға жазу) ресурсты ашық күйінде қалдырғанша толық аяқталмауы мүмкін (мысалы, буферленген деректер дискіге жазылмайды).
- Желі байланыстары: Жабылмаған желі байланыстары порттарды ұстап тұрып, ресурстарды тұтынады.
- Дерекқор байланыстары: Жабылмаған байланыстар байланыс пулын тез таусып, басқа бөлімдердің қызмет көрсетуін тоқтатады.
Ресурстарды сенімді түрде жабу үшін try-with-resources құрылымын қолдану ұсынылады (Java 7-ден бастап):
// try-with-resources қолдану мысалы
try (java.io.FileInputStream fis = new java.io.FileInputStream("file.txt")) {
// Файлды оқу
} catch (java.io.IOException e) {
// Қате өңдеу
} // fis ресурсы автоматты түрде жабылады
Егер try-with-resources қол жетімсіз болса (мысалы, ескі кодпен жұмыс істегенде немесе кітапханаларда, олар AutoCloseable интерфейсін жүзеге асырмайды), finally блогын қолдану керек:
// finally блогын қолдану мысалы
java.io.FileInputStream fis = null;
try {
fis = new java.io.FileInputStream("file.txt");
// Файлды оқу
} catch (java.io.IOException e) {
// Қате өңдеу
} finally {
if (fis != null) {
try {
fis.close();
} catch (java.io.IOException e) {
// Жабу кезінде қате өңдеу
}
}
}
try-with-resources қолдану тиімдірек, себебі ол қысқа әрі сенімді түрде ресурстарды жабуды қамтамасыз етеді, тіпті қателер болған жағдайда да.