Referensi Lemah
Pengumpul sampah tidak dapat mengumpulkan objek yang digunakan oleh aplikasi sementara kode aplikasi dapat menjangkau objek tersebut. Aplikasi tersebut dikatakan memiliki referensi yang kuat terhadap objek tersebut.
Referensi yang lemah memungkinkan pengumpul sampah untuk mengumpulkan objek sambil tetap mengizinkan aplikasi untuk mengakses objek. Referensi lemah hanya valid selama jumlah waktu yang tidak ditentukan sampai objek dikumpulkan ketika tidak ada referensi kuat. Saat Anda menggunakan referensi lemah, aplikasi masih bisa mendapatkan referensi kuat ke objek, yang mencegahnya dikumpulkan. Namun, selalu ada risiko bahwa pengumpul sampah akan mencapai objek terlebih dahulu sebelum referensi kuat dibuat kembali.
Referensi yang lemah berguna untuk objek yang menggunakan banyak memori, tetapi dapat dibuat ulang dengan mudah jika diambil kembali oleh pengumpulan sampah.
Misalkan tampilan hierarki dalam aplikasi Formulir Windows menampilkan pilihan opsi hierarkis yang kompleks kepada pengguna. Jika data yang mendasarinya besar, menyimpan pohon dalam memori tidak efisien ketika pengguna terlibat dengan sesuatu yang lain dalam aplikasi.
Saat pengguna beralih ke bagian lain dari aplikasi, Anda dapat menggunakan kelas WeakReference untuk membuat referensi lemah ke pohon dan menghancurkan semua referensi kuat. Ketika pengguna beralih kembali ke pohon, aplikasi mencoba untuk mendapatkan referensi yang kuat ke pohon dan, jika berhasil, akan menghindari merekonstruksi pohon.
Untuk membuat referensi lemah dengan objek, Anda membuat WeakReference menggunakan instans objek yang akan dilacak. Untuk contoh kode, lihat WeakReference di pustaka kelas.
Referensi Lemah Pendek dan Panjang
Anda dapat membuat referensi lemah pendek atau referensi lemah panjang:
Pendek
Target referensi lemah pendek menjadi
null
saat objek diambil kembali oleh pengumpulan sampah. Referensi lemah itu sendiri adalah objek yang dikelola, dan tunduk pada pengumpulan sampah seperti halnya objek terkelola lainnya. Referensi lemah yang pendek adalah konstruktor tanpa parameter untuk WeakReference.Panjang
Referensi lemah yang panjang dipertahankan setelah metode Finalize objek dipanggil. Hal ini memungkinkan objek untuk dibuat ulang, tetapi status objek tetap tidak dapat diprediksi. Untuk menggunakan referensi panjang, tentukan
true
di konstruktor WeakReference.Jika jenis objek tidak memiliki metode Finalize, fungsi referensi lemah pendek berlaku dan referensi lemah hanya valid hingga target dikumpulkan, yang dapat terjadi kapan saja setelah penyelesai dijalankan.
Untuk membuat referensi yang kuat dan menggunakan objek lagi, masukkan properti Target dari WeakReference ke jenis objek. Jika properti Target mengembalikan null
, objek dikumpulkan; jika tidak, Anda dapat terus menggunakan objek karena aplikasi telah mendapatkan kembali referensi yang kuat untuk objek.
Pedoman untuk Menggunakan Referensi Lemah
Gunakan referensi lemah yang panjang hanya jika diperlukan karena keadaan objek tidak dapat diprediksi setelah finalisasi.
Hindari menggunakan referensi yang lemah untuk objek kecil karena penunjuk itu sendiri mungkin sama besar atau lebih besar.
Hindari menggunakan referensi yang lemah sebagai solusi otomatis untuk masalah manajemen memori. Sebagai gantinya, kembangkan kebijakan penembolokan yang efektif untuk menangani objek aplikasi Anda.