JavaRush /Java Blog /Random-ID /Pemulung di Pulau Jawa
Diana
Level 41

Pemulung di Pulau Jawa

Dipublikasikan di grup Random-ID

Garis perilaku pengumpul sampah (memory reclaimer)

Pemrogram Java tidak perlu memantau alokasi memori karena pengumpul sampah mengelola memori secara otomatis. Pengumpul Sampah dijalankan oleh Java Virtual Machine (JVM). Pengumpul sampah adalah proses berprioritas rendah yang berjalan secara berkala dan membebaskan memori yang digunakan oleh objek yang tidak lagi diperlukan. JVM yang berbeda memiliki algoritma pengumpulan sampah yang berbeda. Ada beberapa algoritma yang digunakan, misalnya: algoritma penghitungan referensi atau algoritma markup dan scraping.Pengumpulan sampah - 1

Menjalankan pengumpul sampah di Jawa

JVM biasanya menjalankan pengumpul sampah ketika memori bebas rendah. Namun pengoperasian pengumpul sampah tidak menjamin bahwa memori bebas akan selalu cukup. Jika tidak ada cukup memori bahkan setelah pemulihan, JVM akan memunculkan pengecualian OutOfMemoryError. Harap dicatat bahwa JVM harus menjalankan pengumpul sampah setidaknya sekali sebelum mengeluarkan pengecualian. Anda dapat meminta pengumpul sampah untuk dijalankan di Java, namun Anda tidak dapat memaksakan tindakan ini.

Permintaan untuk menjalankan pengumpul sampah

Untuk membuat permintaan, Anda dapat memanggil salah satu metode berikut:
System.gc()
Runtime.getRuntime().gc()

Kesesuaian untuk menjalankan pengumpul sampah

Suatu benda harus dibuang bila tidak lagi dapat diakses oleh aliran hidup. Suatu benda dapat dibuang dalam berbagai kasus:
  • Jika variabel tipe referensi yang merujuk ke suatu objek disetel ke "0", objek tersebut harus dibuang jika tidak ada referensi lain ke sana.
  • Jika variabel bertipe referensi yang merujuk ke suatu objek dibuat untuk merujuk ke objek lain, objek tersebut harus dibuang jika tidak ada referensi lain ke sana.
  • Objek yang dibuat secara lokal dalam suatu metode akan dibuang ketika metode tersebut keluar, kecuali objek tersebut diekspor dari metode tersebut (yaitu, dikembalikan atau dilempar sebagai pengecualian).
  • Objek yang saling mereferensikan dapat dibuang jika tidak ada satu pun yang tersedia di thread langsung.
Mari kita lihat sebuah contoh:
public class TestGC
  {
    public static void main(String [] args)
    {
      Object o1 = new Integer(3);               // Line 1
      Object o2 = new String("Tutorial");       // Line 2
      o1 = o2;                                  // Line 3
      o2 = null;                                // Line 4
      // Rest of the code here
    }
  }
Dalam contoh ini Integer, objek (integer) yang awalnya direferensikan oleh pointer o1 dapat dibuang setelah baris 3 karena o1 sekarang merujuk ke objek String(string). Meskipun o2 dibuat untuk merujuk pada null, objek String(string) tidak dapat didaur ulang karena o1 merujuk padanya.

Finalisasi

Teknologi Java memungkinkan Anda menggunakan metode finalize()(menyelesaikan) untuk melakukan pembersihan yang diperlukan sebelum pengumpul sampah mengambil objek dari memori. Metode ini dipanggil pada suatu objek oleh pengumpul sampah ketika pengumpul sampah menentukan bahwa tidak ada lagi referensi ke objek tersebut. Hal ini dijelaskan di class Object, yang artinya diwarisi oleh semua kelas. Subkelas mengesampingkan metode finalize()untuk membebaskan dirinya dari sumber daya sistem atau untuk pembersihan lainnya:
protected void finalize() throws Throwable
Jika pengecualian yang tidak terdaftar dilempar oleh metode ini finalize(), pengecualian tersebut diabaikan dan finalisasi objek tersebut berhenti. Metode ini finalize()hanya akan dipanggil satu kali selama masa hidup objek. Dimungkinkan untuk menggunakan metode finalize()pada objek apa pun untuk melindunginya dari pembuangan. Namun dalam kasus ini, pengumpul sampah tidak lagi diaktifkan finalize()untuk objek ini. Metode ini finalize()akan selalu dipanggil satu kali sebelum objek dikumpulkan sampahnya. Namun, ada kemungkinan bahwa metode tersebut finalize()tidak akan diaktifkan untuk objek tertentu selama keberadaannya, karena metode tersebut mungkin tidak dapat dimusnahkan.

Ringkasan

Di bagian ini, kita melihat proses pengumpulan sampah, yang merupakan teknik manajemen memori dalam bahasa Java. Pengumpulan sampah tidak bisa dipaksakan. Kami mempelajari berbagai cara untuk membuat benda memenuhi syarat untuk didaur ulang dan mempelajari bahwa metode ini finalize()digunakan sebelum benda tersebut direklamasi oleh pemulung.

Latihan

Pertanyaan: Berapa banyak benda yang akan dibuang setelah baris 7?
public class TutorialGC
  {
    public static void main(String [] args)
    {
      Object a = new Integer(100);  // Line1
      Object b = new Long(100);     // Line2
      Object c = new String("100"); // Line3
      a = null;                     // Line4
      a = c;                        // Line5
      c = b;                        // Line6
      b = a;                        // Line7
      // Rest of the code here
    }
  }
Pilihan jawaban : A. 0 B. 1 C. 2 D. 3 E. Kode tidak dapat disusun Pilihan yang benar : B Penjelasan : Dari ketiga benda yang dibuat pada baris 1, 2 dan 3, hanya benda tersebut Integeryang harus dibuang ke tempat akhir baris 7. Referensi variabel, a, yang awalnya mereferensikan objek Integer, mereferensikan objek Stringpada baris 5. Jadi, Integerobjek tersebut harus dibuang setelah baris 5, karena tidak ada variabel yang mereferensikannya. Variabel bdan cmengacu pada objek Stringdan Longobjek pada baris 6 dan 7, sehingga tidak dapat didaur ulang.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION