logo

Java Yok Edici

Java'da sınıftan bir nesne oluşturduğumuzda, bu nesne bellekte (heap) bir miktar yer kaplar. Bu nesneleri silmezsek hafızada kalır ve programlama açısından pek de düz olmayan gereksiz yer kaplar. Bu sorunu çözmek için şunu kullanıyoruz: yok edici . Bu bölümde alternatif seçeneği tartışacağız. Java'da yıkıcı . Ayrıca nasıl kullanılacağını da öğreneceğiz. Sonuçlandırmak() Bir yıkıcı olarak yöntem.

yok edici yapıcının tersidir. Yapıcı nesneleri başlatmak için kullanılırken, yıkıcı nesnenin kapladığı kaynağı serbest bırakan nesneyi silmek veya yok etmek için kullanılır.

Bunu hatırla Java'da yıkıcı kavramı yoktur . Yıkıcının yerine Java, yıkıcıyla aynı şekilde çalışan çöp toplayıcıyı sağlar. Çöp toplayıcı, bilgisayarda çalışan bir programdır (iş parçacığı). JVM . Kullanılmayan nesneleri (artık kullanılmayan nesneler) otomatik olarak siler ve hafızada yer açar. Programcının belleği manuel olarak yönetmesine gerek yoktur. Hataya açık, savunmasız olabilir ve bellek sızıntısına yol açabilir.

Java'daki yıkıcı nedir?

Bir nesne artık kullanılmadığında otomatik olarak çağrılan özel bir yöntemdir. Bir nesne yaşam döngüsünü tamamladığında çöp toplayıcı o nesneyi siler ve nesnenin kapladığı belleği serbest bırakır veya serbest bırakır.

Aynı zamanda şu şekilde de bilinir: sonlandırıcılar bunlar deterministik değildir. İçinde Java tarafından işlenen nesnelerin tahsisi ve tahsisinin kaldırılması Çöp toplayıcı . Sonlandırıcıların çağrılması, örtülü olarak çağrıldığından garanti edilmez.

Destructor'ın Avantajları

  • Nesnenin kullandığı kaynakları serbest bırakır.
  • Açık bir çağrıya gerek yoktur; programın yürütülmesinin sonunda otomatik olarak çağrılır.
  • Hiçbir parametreyi kabul etmez ve aşırı yüklenemez.

Yıkıcı nasıl çalışır?

Nesne oluşturulduğunda yığındaki alanı kaplar. Bu nesneler iş parçacıkları tarafından kullanılır. Nesneler artık iş parçacığı tarafından kullanılmıyorsa, çöp toplama işlemine uygun hale gelir. Bu nesnenin kapladığı bellek artık oluşturulan yeni nesneler için kullanılabilir. Çöp toplayıcı nesneyi yok ettiğinde JRE'nin veri tabanı ve ağ bağlantısı gibi bağlantıları kapatmak için finalize() yöntemini çağırdığı belirtiliyor.

Yukarıdan, yıkıcı ve çöp toplayıcıyı kullanmanın, geliştiricinin bellek yönetimine müdahale düzeyi olduğu sonucuna varabiliriz. İkisi arasındaki temel fark budur. Yıkıcı, nesnenin ne zaman yok edileceğini tam olarak bildirir. Java'dayken çöp toplayıcı aynı işi otomatik olarak yapar. Bellek yönetimine yönelik bu iki yaklaşımın olumlu ve olumsuz etkileri vardır. Ancak asıl sorun, bazen geliştiricinin bellek yönetimine anında erişime ihtiyaç duymasıdır.

Java finalize() Yöntemi

Programcının nesneyi yok etmek için çöp toplayıcıyı zorla çalıştırması zordur. Ancak Java aynısını yapmanın alternatif bir yolunu sağlar. Java Nesne sınıfı şunları sağlar: Sonuçlandırmak() yıkıcıyla aynı şekilde çalışan yöntem. finalize() yönteminin sözdizimi aşağıdaki gibidir:

Sözdizimi:

 protected void finalize throws Throwable() { //resources to be close } 

Bir yıkıcı değildir ancak ekstra güvenlik sağlar. Programı kapatmadan önce dosyanın kapatılması vb. dış kaynakların kullanılmasını sağlar. Yöntemin kendisini kullanarak veya yöntemi çağırarak onu çağırabiliriz. System.runFinalizersOnExit(true) .

  • Java.lang paketinde tanımlanan Object sınıfının korumalı bir yöntemidir.
  • Yalnızca bir kez çağrılabilir.
  • Yöntemi geçersiz kılmak istiyorsak finalize() yöntemini açıkça çağırmamız gerekir.
  • gc(), Çöp Toplayıcı tarafından yürütülen bir JVM yöntemidir. Yığın belleği dolduğunda ve yeni gelen nesneler için daha fazla belleğe ihtiyaç duyulduğunda çağrılır.
  • Denetlenmeyen istisnalar dışında JVM, finalize() yöntemi tarafından meydana gelen tüm istisnaları yok sayar.

Yıkıcı Örneği

YıkıcıExample.java

 public class DestructorExample { public static void main(String[] args) { DestructorExample de = new DestructorExample (); de.finalize(); de = null; System.gc(); System.out.println('Inside the main() method'); } protected void finalize() { System.out.println('Object is destroyed by the Garbage Collector'); } } 

Çıktı:

 Object is destroyed by the Garbage Collector Inside the main() method Object is destroyed by the Garbage Collector