Java adalah bahasa pembangunan yang agak selamat dan pantas berbanding bahasa lain. Namun, disebabkan kewujudan kebocoran memori, program akan ranap akibat penggunaan memori yang berlebihan. Di Java, OutOfMemoryException adalah ralat yang sangat biasa. Ralat ini biasanya disebabkan oleh kebocoran memori. Untuk meminimumkan ralat yang disebabkan oleh kebocoran memori semasa program anda sedang berjalan, artikel ini akan memperkenalkan kebocoran memori dalam Java dan cara untuk mengelakkannya.
1. Apakah itu kebocoran ingatan?
Kebocoran memori bermakna apabila atur cara memperuntukkan memori, ia tidak boleh menuntut semula memori ini, yang membawa kepada pendudukan ruang memori yang berlebihan dan menyebabkan program ranap semasa masa jalan. Di Jawa, kebocoran memori agak jarang berlaku kerana kewujudan pengumpul sampah, yang secara automatik menuntut semula ruang memori yang tidak diperlukan lagi. Walau bagaimanapun, untuk program jangka panjang atau sejumlah besar program jangka pendek, kebocoran memori juga boleh menjadi lebih jelas.
2. Sebab kebocoran memori di Java
1. Rujukan tidak dikeluarkan
Di Jawa, apabila objek diisytiharkan, rujukan dikembalikan. Rujukan ini menyimpan alamat memori objek. Jika rujukan ini tidak dapat dikeluarkan pada peringkat tertentu program, kebocoran memori akan berlaku.
Pengurusan memori di Jawa dilaksanakan melalui pemungut sampah. Pengumpul sampah memeriksa objek secara berkala dan membebaskan objek yang tidak diperlukan. Walau bagaimanapun, jika objek ini masih dirujuk, ia tidak akan dilepaskan oleh pemungut sampah.
2. Caching
Caching dalam Java ialah cara yang sangat mudah untuk mengelakkan akses berulang kepada data. Tetapi jika cache tidak diurus dengan betul, ia boleh menyebabkan kebocoran memori.
Apabila objek dialih keluar daripada cache, ia akan menyebabkan kebocoran memori jika objek masih wujud pada tindanan atau lokasi lain. Untuk mengelakkan kebocoran memori, anda mesti memastikan objek telah dialih keluar apabila anda mengeluarkannya.
3. Sumber tidak tertutup
Di Java, sumber seperti fail, sambungan rangkaian, sambungan pangkalan data, dll. perlu ditutup. Jika sumber ini tidak ditutup, kebocoran memori boleh berlaku.
Apabila menutup sumber, anda harus menggunakan blok pernyataan akhirnya untuk memastikan sumber itu ditutup. Pernyataan cuba-tangkap harus digunakan dalam blok pernyataan akhirnya untuk memastikan ketepatan operasi penutupan.
3. Bagaimana untuk mengelakkan kebocoran memori
1. Gunakan kata kunci akhir
Di Jawa, adalah kebiasaan yang baik untuk menggunakan kata kunci akhir untuk pembolehubah. Selepas pembolehubah diisytiharkan muktamad, ia tidak akan diubah selepas ia diberikan nilai. Ini memastikan bahawa hanya terdapat satu contoh pembolehubah dalam ingatan, dengan berkesan mengelakkan kebocoran memori.
2. Gunakan cache dengan betul
Jika anda perlu menggunakan cache untuk mengelakkan akses berulang, anda perlu memastikan ketepatan cache. Sebelum menambah objek baharu pada cache, anda harus menyemak sama ada objek yang sama sudah wujud. Jika objek sudah wujud, objek baharu tidak boleh ditambahkan pada cache.
Selain itu, anda perlu berhati-hati apabila mendapatkan data dalam cache. Apabila mendapatkan data, anda harus menyemak sama ada ia masih wujud. Jika data cache telah dialih keluar, mendapatkan data adalah tidak sah, yang boleh menyebabkan NullPointerException, menyebabkan program ranap.
3. Tutup sumber dengan betul
Selepas menggunakan sumber, ia harus ditutup dengan betul untuk memastikan sumber tidak bocor. Semua sumber seperti fail, sambungan rangkaian, sambungan pangkalan data, dsb. hendaklah ditutup serta-merta selepas digunakan. Adalah lebih baik untuk menutup sumber dalam blok akhirnya untuk memastikan sumber itu ditutup dengan betul.
4. Gunakan Koleksi dengan Berhati-hati
Koleksi di Java ialah salah satu alatan yang paling penting dalam melaksanakan aplikasi Java. Apabila bekerja dengan koleksi, penjagaan khas mesti diambil untuk memastikan objek dalam koleksi dikitar semula dengan betul.
Untuk program yang berjalan lama, arahan System.gc() hendaklah digunakan secara kerap untuk membersihkan memori. Perintah ini secara eksplisit menghantar permintaan kepada pemungut sampah untuk melaksanakan operasi penambakan memori.
Ringkasan
Di Jawa, kebocoran memori adalah masalah yang agak jarang berlaku tetapi sangat menjengkelkan. Untuk mengelakkan kebocoran memori, gunakan kata kunci terakhir, urus cache, tutup sumber dengan betul dan gunakan koleksi dengan berhati-hati. Jika kaedah ini tidak menyelesaikan isu, anda boleh menggunakan alat pengesanan untuk mengenal pasti kebocoran memori dan menyelesaikan isu tersebut. Melaksanakan strategi ini boleh membantu anda mengelakkan kebocoran memori dan memastikan kestabilan program.
Atas ialah kandungan terperinci OutOfMemoryException di Java - Bagaimana untuk menyelesaikan kebocoran memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!