Terdapat dua situasi limpahan ingatan: satu ialah limpahan tindanan, seperti memanggil ulangan tak terhingga. Terdapat juga limpahan timbunan, iaitu objek yang keluar daripada baru tidak dimusnahkan serta-merta, seperti baru sepanjang masa.
Secara umumnya, kebocoran memori di Java merujuk kepada fakta bahawa memori yang diperuntukkan yang tidak lagi diperlukan oleh program tidak boleh dituntut semula. Mekanisme pengumpulan sampah menentukan sama ada memori boleh dituntut semula melalui kebolehcapaian objek dan objek Root Walau bagaimanapun, disebabkan ralat pengaturcaraan atau sebab lain, rujukan objek yang telah tamat tempoh masih dipegang dan pengumpul sampah tidak boleh menuntut semula yang berkaitan. angkasa lepas.
Tiada apa yang boleh dia lakukan jika dia menduduki lurang dan tidak membuang air besar. Saya syorkan membaca blog yang ditulis oleh rakan sekerja saya: http://blog.csdn.net/zhanggan...
Buat masa ini, perkara yang dibuat oleh manusia tidak boleh mengatasi algoritma GC Java yang ditulis oleh manusia, bagaimanapun, sesetengah orang akan mempertaruhkan nyawa mereka dan menulis kod yang tidak boleh dikitar semula oleh GC
Pemahaman saya sendiri, sila betulkan saya jika saya salah. Dalam JDK6, kaedah String dipanggil subString, yang digunakan untuk menjana substring. Untuk penjanaan yang lebih pantas, String mempunyai pembina, String(int offset, int count, char value[]) {
} terus menghala ke tatasusunan String asal. Kita semua tahu bahawa rentetan String baharu dalam kolam malar akan dijana setiap kali. Walau bagaimanapun, rujukan ini menyebabkan String asal tidak dikitar semula. Kerana nilai subString akan menunjuk kepadanya. Ini akan menyebabkan kebocoran ingatan.
JVM melakukan GC dengan sendirinya tanpa terlalu banyak gangguan daripada pengaturcara Walau bagaimanapun, disebabkan oleh beberapa operasi yang salah, sesetengah objek yang tidak perlu digunakan masih mempunyai rujukan, yang membawa kepada kebocoran memori.
Sumber memori adalah terhad Pengumpulan sampah hanya mengitar semula "sampah".
Terdapat dua situasi limpahan ingatan: satu ialah limpahan tindanan, seperti memanggil ulangan tak terhingga. Terdapat juga limpahan timbunan, iaitu objek yang keluar daripada baru tidak dimusnahkan serta-merta, seperti baru sepanjang masa.
Oleh kerana sesetengah atur cara yang ditulis dengan buruk akan mencipta objek tanpa had sebelum mekanisme GC berkuat kuasa.
Secara umumnya, kebocoran memori di Java merujuk kepada fakta bahawa memori yang diperuntukkan yang tidak lagi diperlukan oleh program tidak boleh dituntut semula.
Mekanisme pengumpulan sampah menentukan sama ada memori boleh dituntut semula melalui kebolehcapaian objek dan objek Root Walau bagaimanapun, disebabkan ralat pengaturcaraan atau sebab lain, rujukan objek yang telah tamat tempoh masih dipegang dan pengumpul sampah tidak boleh menuntut semula yang berkaitan. angkasa lepas.
Tiada apa yang boleh dia lakukan jika dia menduduki lurang dan tidak membuang air besar.
Saya syorkan membaca blog yang ditulis oleh rakan sekerja saya: http://blog.csdn.net/zhanggan...
Sesetengah objek tidak lagi diperlukan tetapi sentiasa dirujuk dan tidak boleh dikitar semula
Buat masa ini, perkara yang dibuat oleh manusia tidak boleh mengatasi algoritma GC Java yang ditulis oleh manusia, bagaimanapun, sesetengah orang akan mempertaruhkan nyawa mereka dan menulis kod yang tidak boleh dikitar semula oleh GC
Ini sama dengan
中国那么大,为什么还有人在朝阳区懵逼
.Pemahaman saya sendiri, sila betulkan saya jika saya salah.
Dalam JDK6, kaedah String dipanggil subString, yang digunakan untuk menjana substring. Untuk penjanaan yang lebih pantas, String mempunyai pembina,
String(int offset, int count, char value[]) {
}
terus menghala ke tatasusunan String asal. Kita semua tahu bahawa rentetan String baharu dalam kolam malar akan dijana setiap kali. Walau bagaimanapun, rujukan ini menyebabkan String asal tidak dikitar semula. Kerana nilai subString akan menunjuk kepadanya. Ini akan menyebabkan kebocoran ingatan.
JVM melakukan GC dengan sendirinya tanpa terlalu banyak gangguan daripada pengaturcara Walau bagaimanapun, disebabkan oleh beberapa operasi yang salah, sesetengah objek yang tidak perlu digunakan masih mempunyai rujukan, yang membawa kepada kebocoran memori.
JVM: Pengaturcara berpegang pada sampah, yang membuatkan saya sangat malu.