8.1 Referensi lemah ing basa Jawa
Ana sawetara jinis referensi ing basa Jawa.
Ana StrongReference - iki minangka pranala paling umum sing digawe saben dina.
Object object = new Object();//created an object
object = null;//can now be garbage collected
Lan ana telung jinis tautan "khusus" - SoftReference, WeakReference, PhantomReference. Nyatane, mung ana siji prabédan ing antarane kabeh jinis pranala - prilaku GC karo obyek sing dirujuk. Kita bakal ngrembug babagan spesifik saben jinis tautan kanthi luwih rinci mengko, nanging saiki, kawruh ing ngisor iki bakal cukup:
- SoftReference minangka referensi alus, yen GC weruh yen obyek mung bisa diakses liwat rantai referensi alus, banjur bakal mbusak saka memori. Mbok.
- WeakReference - referensi banget, yen GC weruh sing obyek mung bisa diakses liwat chain saka referensi banget, banjur bakal mbusak saka memori.
- PhantomReference minangka referensi phantom, yen GC weruh yen obyek mung kasedhiya liwat rantai referensi phantom, banjur bakal mbusak saka memori. Sawise sawetara mlaku GC.
Sampeyan uga bisa ujar manawa jinis tautan duwe tingkat kelembutan tartamtu:
- Link hard biasa yaiku variabel saka jinis referensi. Ora diresiki dening tukang sampah sadurunge dadi ora digunakake.
- SoftReference . Obyek ora bakal njalari kabeh memori digunakake - iki dijamin bakal dibusak sadurunge OutOfMemoryError dumadi. Mungkin sadurunge, gumantung saka implementasine tukang sampah.
- WeakReference . Lemah alus. Ora nyegah obyek supaya ora dibuwang; tukang sampah ora nggatekake referensi kasebut.
- PhantomReference . Digunakake kanggo "mati" pangolahan obyek: obyek kasedhiya sawise finalisasi nganti uwuh diklumpukake.
Yen durung jelas apa bedane, aja kuwatir, ora suwe kabeh bakal tiba. Rincian ing rincian, lan rincian bakal tindakake.
8.2 WeakReference lan SoftReference ing Jawa
Pisanan, ayo goleki bedane WeakReference lan SoftReference ing Jawa.
Singkatipun, kolektor sampah bakal mbebasake memori obyek yen mung referensi sing lemah. Yen obyek kasebut ditunjuk dening SoftReferences, banjur memori bakal dialokasikan nalika JVM mbutuhake memori.
Iki menehi kauntungan tartamtu kanggo SoftReference liwat referensi Kuwat ing kasus tartamtu. Contone, SoftReference digunakake kanggo ngleksanakake cache aplikasi, dadi bab pisanan JVM bakal mbusak obyek sing mung SoftReferences titik.
WeakReference apik kanggo nyimpen metadata, kayata nyimpen referensi menyang ClassLoader. Yen ora ana kelas sing dimuat, mula sampeyan ora kudu ngrujuk menyang ClassLoader. Iki kok WeakReference ndadekake iku bisa kanggo kolektor uwuh kanggo nindakake sawijining karya ing ClassLoader sanalika referensi kuwat pungkasan kanggo dibusak.
Tuladha WeakReference ing Jawa:
// some object
Student student = new Student();
// weak reference to it
WeakReference weakStudent = new WeakReference(student);
// now the Student object can be garbage collected
student = null;
Tuladha SoftReference ing Jawa:
// some object
Student student = new Student();
// weak reference to it
SoftReference softStudent = new SoftReference(student)
// now the Student object can be garbage collected
// but this will only happen if the JVM has a strong need for memory
student = null;
8.3 Referensi Phantom ing Jawa
Instance PhantomReference digawe kanthi cara sing padha karo conto WeakReference lan SoftReference, nanging arang digunakake.
PhantomReference bisa dadi sampah sing diklumpukake yen obyek ora duwe referensi kuwat (Kuwat), lemah (WeakReference), utawa alus (SoftReference).
Sampeyan bisa nggawe obyek Referensi Phantom kaya iki:
PhantomReference myObjectRef = new PhantomReference(MyObject);
PhantomReference bisa digunakake ing kahanan sing finalize () ora nggawe raos. Jinis referensi iki beda karo jinis liyane amarga ora dirancang kanggo ngakses obyek. Iki minangka sinyal yen obyek kasebut wis rampung lan tukang sampah wis siyap kanggo mbalekake memori.
Kanggo nindakake iki, kolektor sampah nyelehake ing ReferenceQueue khusus kanggo proses luwih lanjut. ReferenceQueue ngendi referensi obyek diselehake kanggo free memori.
Referensi Phantom minangka cara sing aman kanggo ngerti manawa obyek wis dibusak saka memori. Contone, nimbang aplikasi sing gegayutan karo gambar gedhe. Ayo kita ngomong yen kita pengin mbukak gambar menyang memori yen wis ana ing memori, sing siap kanggo koleksi sampah. Ing kasus iki, kita pengin ngenteni kolektor sampah mateni gambar lawas sadurunge ngemot gambar anyar menyang memori.
Ing kene PhantomReference minangka pilihan sing fleksibel lan aman. Referensi kanggo gambar lawas bakal liwati menyang ReferenceQueue sawise obyek gambar lawas wis numpes. Sawise kita duwe link iki, kita bisa mbukak gambar anyar menyang memori.