Adakah Menugaskan Null pada Objek Meningkatkan Pengumpulan Sampah Java?
Menetapkan rujukan kepada objek yang tidak digunakan sebagai null telah dibahaskan sebagai cara yang berpotensi untuk meningkatkan prestasi kutipan sampah (GC) JVM. Walau bagaimanapun, konsensus adalah bahawa dalam kebanyakan kes, ia tidak menghasilkan apa-apa faedah yang ketara.
Java GC dengan cekap memantau objek yang tidak boleh dicapai dan dengan segera menuntut semula ingatan mereka. Menugaskan null secara eksplisit kepada objek tidak akan mempercepatkan proses ini melainkan ia kekal dirujuk secara eksplisit di tempat lain. Sebagai contoh, dalam kes tatasusunan, membatalkan elemen individu apabila ia menjadi tidak diperlukan boleh membantu mengoptimumkan peruntukan memori.
Pelaksanaan ArrayList menggambarkan perkara ini:
public E remove(int index) { RangeCheck(index); modCount++; E oldValue = (E) elementData[index]; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work return oldValue; }
Dalam senario ini, secara eksplisit menetapkan null kepada elemen yang dialih keluar memulakan GC untuk menuntut semula memori, tetapi ia tidak akan berlaku dengan ketara lebih awal berbanding dengan membiarkan rujukan secara semula jadi di luar skop. Oleh itu, kedua-dua coretan kod berikut adalah setara dari segi fungsi:
void foo() { Object o = new Object(); /// do stuff with o }
void foo() { Object o = new Object(); /// do stuff with o o = null; }
Walaupun secara eksplisit menetapkan rujukan kepada null boleh memberikan ketenangan fikiran, ia tidak menawarkan sebarang peningkatan yang boleh diukur kepada proses GC. Hanya dalam senario tertentu, seperti mengurus tatasusunan, ia boleh memberi manfaat.
Atas ialah kandungan terperinci Adakah Menetapkan Objek kepada Null Sebenarnya Meningkatkan Pengumpulan Sampah Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!