Rumah  >  Artikel  >  Java  >  Rujukan Java

Rujukan Java

PHPz
PHPzasal
2024-08-30 15:17:41928semak imbas

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

Jenis Rujukan Java dengan Contoh

Terdapat empat jenis rujukan java berdasarkan tingkah laku Pemungut Sampah pada rujukan.

  • Rujukan Kuat: Ini ialah rujukan lalai dalam java. Rujukan yang kukuh boleh dibuat apabila objek ditakrifkan dengan kerap.
  • Rujukan Lemah: Rujukan ini perlu dinyatakan dengan jelas. Rujukan yang lemah boleh dibuat dengan menggunakan kelas java.lang.ref.WeakReference.
  • Rujukan Lembut: Rujukan lembut boleh dibuat dengan menggunakan kelas lang.ref.SoftReference.
  • Rujukan Hantu: rujukan hantu boleh dibuat dengan menggunakan kelas lang.ref.PhantomReference.

1. Rujukan Kuat

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.

Contoh

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 Java

2. Rujukan Lemah

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.

Contoh

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:

Rujukan Java

3. Rujukan Lembut

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);
Contoh

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:

Rujukan Java

4. Rujukan Hantu

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.

Contoh

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:

Rujukan Java

Atas ialah kandungan terperinci Rujukan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Peruntukan Memori dalam JavaArtikel seterusnya:Peruntukan Memori dalam Java