Rumah  >  Artikel  >  tutorial komputer  >  Senarai kategori dan situasi kebocoran ingatan

Senarai kategori dan situasi kebocoran ingatan

王林
王林ke hadapan
2024-01-14 19:48:371029semak imbas

Senarai kategori dan situasi kebocoran ingatan

Kebocoran memori secara amnya dibahagikan kepada beberapa situasi

Kebocoran memori biasa disebabkan oleh pelbagai pelaksanaan kod. Kebocoran memori berlaku setiap kali ia dilaksanakan.

2. Kebocoran memori sporadis merujuk kepada kod di mana kebocoran memori berlaku hanya di bawah persekitaran atau operasi tertentu. Kebocoran memori seperti ini tidak berlaku secara berterusan, tetapi sekali-sekala. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kebocoran memori sporadis mungkin menjadi kerap dalam keadaan tertentu. Oleh itu, persekitaran ujian dan kaedah ujian adalah faktor yang sangat penting apabila mengesan kebocoran memori.

Kebocoran memori sekali bermakna bahawa kod di mana kebocoran memori berlaku hanya akan dilaksanakan sekali, atau disebabkan kelemahan algoritma, akan sentiasa ada satu dan hanya satu bahagian memori yang bocor. Sebagai contoh, ingatan diperuntukkan dalam pembina kelas, tetapi ingatan tidak dikeluarkan dalam pemusnah. Memandangkan hanya satu contoh kelas ini wujud, kebocoran memori hanya akan berlaku sekali. Dalam kes ini, kebocoran memori tidak akan berlaku semula, tetapi ia masih akan menyebabkan pembaziran sumber memori dan merendahkan prestasi sistem. Oleh itu, semasa menulis kod, kita harus memberi perhatian khusus untuk mengelakkan kebocoran memori sekali sahaja.

4. Kebocoran memori tersirat bermakna memori kerap diperuntukkan semasa program sedang berjalan, tetapi tidak dikeluarkan sehingga tamat program. Tegasnya, ini bukan kebocoran ingatan sebenar, kerana ingatan itu akhirnya akan dikeluarkan. Walau bagaimanapun, untuk program pelayan yang berjalan lama, jika ingatan tidak dikeluarkan tepat pada masanya, sistem akhirnya mungkin kehabisan memori. Oleh itu, kami memanggil situasi ini sebagai kebocoran ingatan tersirat. Kebocoran memori ini tidak menyebabkan masalah segera, tetapi dari masa ke masa, ia mungkin memberi kesan negatif terhadap prestasi dan kestabilan sistem. Untuk mengelakkan kebocoran memori tersirat, pembangun harus mengeluarkan memori yang tidak digunakan tepat pada masanya untuk memastikan operasi normal sistem.

Dalam keadaan apakah kebocoran memori akan berlaku di java

Kebocoran memori merujuk kepada objek atau pembolehubah yang tidak digunakan oleh program yang menduduki memori untuk jangka masa yang lama. Di Jawa, terdapat beberapa situasi kebocoran memori.

Objek tahan lama yang memegang rujukan kepada objek jangka pendek boleh menyebabkan kebocoran ingatan. Sebagai contoh, dalam sistem cache, kami memuatkan objek ke dalam cache dan meletakkannya dalam objek peta global, tetapi kemudian objek itu tidak lagi digunakan. Walau bagaimanapun, objek masih dirujuk oleh cache dan tidak boleh dilepaskan. Dalam kes ini, objek yang tidak lagi digunakan harus dibersihkan tepat pada masanya untuk mengelakkan kebocoran memori.

Untuk pembolehubah koleksi global, jika tiada mekanisme pemadaman yang sepadan, penggunaan memori mungkin hanya meningkat dan bukannya berkurangan. Oleh itu, adalah perlu untuk menyediakan mekanisme pemadaman atau strategi pembersihan biasa.

Penggunaan corak tunggal yang tidak betul adalah masalah kebocoran memori yang biasa. Setelah objek tunggal dimulakan, ia akan wujud (dalam bentuk pembolehubah statik) sepanjang kitaran hayat JVM. Jika objek tunggal memegang rujukan kepada objek luaran, objek luaran tidak akan dikitar semula secara normal oleh JVM, mengakibatkan kebocoran memori.

Perbezaan antara limpahan memori dan kebocoran memori, punca dan penyelesaian

Limpahan memori (kehabisan ingatan) bermakna apabila atur cara memohon untuk ingatan, ralat berlaku disebabkan ruang memori yang tersedia tidak mencukupi dan tidak dapat memenuhi keperluan program. Sebagai contoh, jika program menggunakan ruang memori jenis integer, tetapi sebenarnya perlu menyimpan nilai yang boleh ditampung oleh integer panjang, ralat limpahan memori akan berlaku. Dalam kes ini, atur cara tidak boleh berjalan secara normal, dan masalah itu perlu diselesaikan dengan meningkatkan memori yang tersedia atau mengoptimumkan logik program.

Kebocoran memori Kebocoran memori bermakna bahawa selepas program menggunakan memori, ia tidak dapat melepaskan ruang memori yang telah digunakan untuk kebocoran memori, tetapi akibat pengumpulan kebocoran memori adalah serius banyak memori tersedia, ia akan diduduki lambat laun.

Kebocoran memori akhirnya akan menyebabkan hilang ingatan!

Punca:

1. Jumlah data yang dimuatkan dalam memori adalah terlalu besar, seperti mengambil terlalu banyak data daripada pangkalan data pada satu masa

2. Terdapat rujukan kepada objek dalam kelas koleksi, yang tidak dibersihkan selepas digunakan, menjadikan JVM tidak dapat mengitar semula

3. Terdapat gelung tak terhingga dalam kod atau gelung menjana terlalu banyak entiti objek pendua

4. BUG dalam perisian pihak ketiga yang digunakan;

5 Nilai memori parameter permulaan ditetapkan terlalu kecil

Penyelesaian:

1) Apabila memproses penghantaran data beberapa aliran IO, cuba matikan aliran IO pada penghujungnya

2) Apabila memproses foto yang dimuat turun, gunakan BitmapFactory.options. Tetapkan kaedah insameplesize() untuk memampatkan imej untuk mengurangkan penggunaan sumber topik khas akan ditulis di bawah tentang isu pemampatan imej

3) Anda juga boleh mengurangkan memori yang diduduki dengan mengurangkan piksel foto

4) Kitar semula sumber: Bitmap.recycle()bitmap=null;

5) Cuba gunakan pembolehubah global dan elakkan objek baharu

Memori bocor sendiri tidak akan mendatangkan mudarat Sebagai pengguna biasa, mereka tidak akan merasai kewujudan memori bocor sama sekali. Apa yang benar-benar berbahaya ialah pengumpulan kebocoran memori, yang akhirnya akan memakan semua memori sistem. Dari perspektif ini, kebocoran ingatan sekali sahaja tidak berbahaya kerana ia tidak terkumpul, manakala kebocoran ingatan tersirat adalah sangat berbahaya. Menyebabkan program ranap;

Cara menyelesaikan masalah kebocoran memori dalaman

Ya. Sebab Java menyebabkan kebocoran ingatan adalah sangat jelas: jika objek berumur panjang memegang rujukan kepada objek jangka pendek, kebocoran ingatan mungkin berlaku Walaupun objek jangka pendek tidak lagi diperlukan, kerana objek jangka panjang. objek hidup memegang rujukannya Akibatnya, ia tidak boleh dikitar semula Ini adalah senario di mana kebocoran memori berlaku di Jawa.

1. Kelas koleksi, kelas koleksi hanya mempunyai kaedah untuk menambah elemen, tetapi tidak mempunyai mekanisme pemadaman yang sepadan, menyebabkan memori diduduki. Ini sebenarnya tidak jelas. Jika kelas koleksi ini hanyalah pembolehubah tempatan, ia tidak akan menyebabkan kebocoran memori sama sekali Selepas timbunan kaedah keluar, tidak akan ada rujukan dan ia akan dikitar semula secara normal oleh jvm. Dan jika kelas koleksi ini ialah pembolehubah global (seperti atribut statik dalam kelas, peta global, dsb., yang mempunyai rujukan statik atau akhir sentiasa menunjuk kepadanya), maka tiada mekanisme pemadaman yang sepadan, yang mungkin menyebabkan memori yang diduduki oleh koleksi menjadi hanya Ia meningkat dan bukannya berkurangan, jadi ia adalah perlu untuk menyediakan mekanisme pemadaman sedemikian atau strategi pembersihan biasa.

2. 2. Mod tunggal. Penggunaan corak tunggal yang tidak betul adalah masalah biasa yang menyebabkan kebocoran memori Selepas dimulakan, objek tunggal akan wujud sepanjang kitaran hayat JVM (dalam bentuk pembolehubah statik jika objek tunggal memegang rujukan kepada luaran). objek, Kemudian objek luaran ini tidak akan dikitar semula secara normal oleh jvm, mengakibatkan kebocoran memori. Pertimbangkan contoh berikut: kelas A{

3 awam A(){

4. B.getInstance().setA(this);}

5. ...}

6. //Kelas B menggunakan mod tunggal kelas B{

7 peribadi A a;

8 contoh B statik peribadi=B();

9 B(){}

10 awam statik B getInstance(){

11. contoh pulangan;}

Atas ialah kandungan terperinci Senarai kategori dan situasi kebocoran ingatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:docexcel.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam