JavaRush /Blog Jawa /Random-JV /Bedane referensi lemah, alus, hantu lan biasa ing basa Ja...
theGrass
tingkat
Саратов

Bedane referensi lemah, alus, hantu lan biasa ing basa Jawa

Diterbitake ing grup
Referensi "Lemah" lan referensi "alus" (WeakReference, SoftReference) ditambahake ing Java API suwene suwe, nanging ora saben programer ngerti. Iki nuduhake longkangan ing pangerten ngendi lan carane nggunakake. Kelas referensi utamane penting ing konteks pangumpulan sampah . Kita kabeh ngerti, kolektor sampah dhewe mbebasake memori sing dikuwasani obyek, nanging ora kabeh programer ngerti yen nggawe keputusan kanggo mbebasake memori adhedhasar jinis referensi sing kasedhiya kanggo obyek kasebut. Bedane referensi lemah, alus, hantu lan reguler ing basa Jawa - 1Bentenipun utama antarane SoftReference lan WeakReference yaiku carane kolektor bakal bisa nggarap dheweke. Bisa mbusak obyek sawayah-wayah yen mung pranala sing ringkih nuding, ing tangan liyane, obyek karo link alus bakal diklumpukake mung nalika JVM pancene mbutuhake memori. Amarga fitur kelas referensi kasebut, saben kelas kasebut duwe panggunaan dhewe. SoftReference bisa digunakake kanggo ngleksanakake cache lan nalika JVM mbutuhake memori bakal mbebasake kanthi mbusak obyek kasebut. Lan WeakReferences apik kanggo nyimpen metadata, contone, nyimpen link menyang ClassLoader. Yen ora ana kelas kanggo mbukak banjur ora ana gunane kanggo nyimpen referensi kanggo ClassLoader , referensi banget ndadekake ClassLoader kasedhiya kanggo dibusak sanalika kita nemtokake tinimbang referensi Kuwat. Ing artikel iki kita bakal ndeleng beda antarane jinis link, kalebu referensi Kuwat lan referensi Phantom .

WeakReference vs SoftReference ing Jawa

Kanggo sing ora ngerti, ana 4 jinis tautan:
  1. referensi kuwat
  2. Referensi Lemah
  3. Referensi alus
  4. Referensi Phantom
Tautan sing kuat iku paling gampang, amarga kita nggunakake program saben dina, contone, ing kode kaya String s = "abc" variabel s minangka tautan sing kuat. Sembarang obyek sing nduweni referensi sing kuat dilarang dicopot dening tukang sampah. Mesthine, iki minangka obyek sing dibutuhake program Java . Referensi sing lemah diwakili dening kelas java.lang.ref.WeakReference , sampeyan bisa nemtokake referensi sing lemah kaya iki:
Counter counter = new Counter(); // strong reference
WeakReference weakCounter = new WeakReference(counter); //weak reference
counter = null; // now Counter object is eligible for garbage collection
Saiki, yen sampeyan nyetel counter referensi kuwat kanggo null (counter = null), obyek digawe ing baris pisanan kasedhiya kanggo koleksi sampah amarga wis ora ana referensi kuwat maneh. Referensi weakCounter digawe dening Weak ora bisa nyegah kolektor saka mbusak obyek Counter. Ing tangan liyane, yen referensi Soft, obyek Counter ora bakal dibusak nganti JVM wis perlu utamané dhuwur kanggo memori. Referensi alus ing Jawa diwakili dening kelas java.lang.ref.SoftReference . Conto nggawe SoftReference ing Jawa
Counter prime = new Counter();  // prime holds a strong reference
SoftReference soft = new SoftReference(prime) ; //soft reference variable has SoftReference to Counter Object
prime = null;  // now Counter object is eligible for garbage collection but only be collected when JVM absolutely needs memory
Sawise ngresiki referensi sing kuwat (ing baris kaping 3), mung ana 1 referensi alus sing isih ana ing obyek Counter, sing ora bakal bisa nyegah pengumpul sampah mbusak obyek iki, nanging ora kaya referensi sing ringkih, bakal bisa. kanggo nundha proses iki nganti ana kekurangan memori sing akut. Amarga prabédan antarane pranala alus lan pranala lemah, sing pisanan luwih cocok kanggo cache, lan lemah kanggo metadata. Conto sing apik yaiku kelas WeakHashMap, sing minangka turunan saka antarmuka Peta kaya kelas HashMap utawa TreeMap , nanging kanthi siji fitur sing khas. WeakHashMap mbungkus kunci minangka referensi sing lemah, tegese yen ora ana referensi sing kuwat kanggo obyek, referensi sing lemah sing ana ing WeakHashMap ora bakal nylametake sampeyan saka pangumpulan sampah. Link Phantom minangka jinis pranala katelu sing kasedhiya ing paket java.lang.ref. Referensi Phantom diwakili dening kelas java.lang.ref.PhantomReference . Obyek sing ditunjuk mung kanthi pranala phantom bisa dibusak dening kolektor sawayah-wayah. Link Phantom digawe kanthi cara sing padha karo link sing lemah utawa alus.
DigitalCounter digit = new DigitalCounter(); // digit reference variable has strong reference
PhantomReference phantom = new PhantomReference(digit); // phantom reference
digit = null;
Sawise sampeyan mbusak referensi kuwat kanggo obyek DigitalCounter, kolektor uwuh bakal mbusak sawayah-wayah, amarga saiki mung referensi phantom nunjuk menyang. Saliyane kelas WeakReference, SoftReference, PhantomReference, WeakHashMap, migunani kanggo ngerti babagan kelas ReferenceQueue . Sampeyan bisa nggunakake kelas iki nalika nggawe obyek WeakReference, SoftReference, utawa PhantomReference:
ReferenceQueue refQueue = new ReferenceQueue(); //reference will be stored in this queue for cleanup
DigitalCounter digit = new DigitalCounter();
PhantomReference phantom = new PhantomReference(digit, refQueue);
Referensi obyek bakal ditambahake menyang ReferenceQueue lan sampeyan bisa ngawasi kahanan referensi kanthi polling ReferenceQueue. Siklus urip Obyek uga dituduhake ing diagram iki: Bedane referensi lemah, alus, phantom lan reguler ing basa Jawa - 2Iku kabeh beda antarane referensi lemah lan alus ing Jawa . Kita uga kenal karo tautan phantom, kelas WeakHashMap lan ReferenceQueue . Nggunakake referensi kanthi bener bakal mbantu nglumpukake sampah lan bakal ngasilake manajemen memori sing luwih fleksibel ing Jawa . Artikel asli
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION