Salah satu kelebihan bahasa Java ialah ia secara automatik menguruskan pengaturcara memori tidak perlu mengambil beban pengurusan memori dan tidak perlu risau untuk membebaskan memori objek apabila objek tidak diperlukan lagi. Benang Pemungut Sampah java melakukan ini untuk pengaturcara; ia menyapu keluar objek yang tidak diingini dan membebaskan memori dengan di bawah kawalan JVM. Pengaturcara juga boleh mengawal bila objek akan dikumpul sampah apabila diperlukan dengan menggunakan kelas java.lang.ref. Terdapat empat jenis rujukan dalam java berdasarkan cara ia mengumpul sampah atau berdasarkan tingkah laku Pengumpul Sampah pada rujukan.
Mulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Terdapat empat jenis rujukan java berdasarkan tingkah laku Pemungut Sampah pada rujukan.
Rujukan yang kuat biasanya kami gunakan semasa kami menulis kod java atau kami mencipta objek. Objek yang mempunyai rujukan yang kuat dan aktif dalam ingatan tidak layak untuk kutipan sampah, objek yang telah merujuk dengan kuat mata kepada null boleh dikumpul sampah. Contohnya, coretan kod di bawah dengan ob pembolehubah ialah objek jenis ClassA.
ClassA ob = new ClassA();
Objek 'ob' mempunyai rujukan kukuh yang menunjuk ke kelas KelasA; objek ini tidak boleh dikumpul sampah kerana ob ialah objek aktif.
Jika rujukan ‘ob’ menunjuk kepada null seperti di bawah –
ob = null;
Sekarang objek tidak merujuk kepada kelas ClassA; objek layak untuk kutipan sampah sekarang.
Kod:
package p1; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection System.out.println(ob); } }
Output:
Rujukan yang lemah layak untuk kutipan sampah. Setelah JVM mengesan objek dengan rujukan yang lemah, objek ini ditanda dan sampah dikumpul apabila benang pengumpul sampah dijalankan oleh JVM. Jenis rujukan ini digunakan dalam WeakHashMap untuk kemasukan objek. Rujukan yang lemah boleh dibuat oleh kelas lang.ref.WeakReference. Rujukan lemah yang boleh digunakan dalam aplikasi adalah untuk mewujudkan DBConnection, dan setelah pangkalan data ditutup, sambungan bebas oleh Garbage Collector. Contohnya, coretan kod di bawah dengan ob pembolehubah ialah objek jenis ClassA.
ClassA ob = new ClassA();
Objek 'ob' ialah rujukan yang kuat untuk menjadikannya boleh dikumpul sampah kita perlu menukar penghormatannya kepada rujukan lemah seperti di bawah -
WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);
Kini objek itu lemah merujuk kepada kelas ClassA, objek kini tersedia untuk kutipan sampah dan ia adalah sampah yang dikumpul apabila JVM menjalankan utas kutipan sampah.
Kod:
package p1; import java.lang.ref.WeakReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now create Weak Reference object to which <u>ob</u> object is pointing WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob); // Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory ob = null; System.out.println(ob); // weakly referenced <u>ob</u> object can get back ob = weakob.get(); System.out.println(ob); } }
Output:
Objek rujukan lembut tidak layak untuk pengumpulan sampah sehingga JVM kehabisan memori atau JVM sangat memerlukan ingatan. Rujukan yang lemah boleh dibuat oleh kelas lang.ref.SoftReference. Sebagai contoh, rujukan lembut boleh mencipta Begitu juga dengan rujukan lemah.
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
Kod:
package p1; import java.lang.ref.SoftReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA();// default reference or Strong Reference System.out.println(ob); // now create soft Reference object which ob object is pointing SoftReference <ClassA> softob = new SoftReference <ClassA>(ob); // Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory ob = null; System.out.println(ob); // the soft referenced, ob object can get back ob = softob.get(); System.out.println(ob); } }
Output:
Objek rujukan hantu tersedia untuk pengumpulan sampah, tetapi sebelum sampah mengumpulnya, objek diletakkan dalam baris gilir rujukan yang dinamakan sebagai 'baris gilir rujukan' oleh JVM; selepas fungsi finalize() panggil pada objek. Rujukan yang lemah boleh dibuat oleh lang.ref kelas. PhantomReference.
Kod:
package p1; import java.lang.ref.ReferenceQueue; import java.lang.ref.PhantomReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now Create Reference queue object ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>(); // Create Phantom Reference object to which <u>ob</u> object is pointing PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq); // Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing ob = null; System.out.println(ob); // to get back object which has been Phantom referenced returns null ob = phantomob.get(); System.out.println(ob); } }
Output:
Atas ialah kandungan terperinci Rujukan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!