what is garbage collection java
Bu Öğretici Java'da Çöp Toplama'nın ne olduğunu ve Çöp Toplayıcının nasıl çalıştığını açıklar. Ayrıca Çöp Toplama Algoritmaları hakkında bilgi edineceksiniz:
C / C ++ konusunda bilgili okuyucular, nesneleri C / C ++ 'da oluşturup silmenin programcının sorumluluğunda olduğunun farkında olmalıdır.
Programcı yaratılan nesneleri yok etmeyi unutursa ciddi hatalar ortaya çıkar. Bunun nedeni, nesnelerin imha edilmemesinin ' Bellek yetersiz 'Hataları, bellek sızıntıları vb.
Bir programcının nesneleri takip etmesine gerek olmadığı için bu durum Java'da tamamen halledilir. Java, otomatik çöp toplama yoluyla bizim için nesne yok etme ile ilgilenir.
=> Java'yı Sıfırdan Öğrenmek İçin Burayı Ziyaret Edin.
Artık kullanılmayan nesnelerin yığın hafızasından kaldırılması işlemine 'Çöp Toplama' denir. Çöp toplama tekniği, Java'da bellek yönetiminin bir parçasıdır.
Böylece Java'da, Çöp Toplayıcı artık kullanılmayan tüm nesneleri yok eder.
Ne öğreneceksin:
- Java'da Çöp Toplayıcı Nedir?
- Java'da Çöp Toplama Nasıl Çalışır?
- Java'da Çöp Toplama Algoritmaları
- Sonuç
Java'da Çöp Toplayıcı Nedir?
Java'da Çöp Toplama, Çöp Toplayıcı adlı bir program tarafından yönetilir.
Çöp Toplayıcı, nesne tahsisini kaldırarak belleği otomatik olarak yönetmek için kullanılan bir program olarak tanımlanabilir.
Java dilinde, yeni nesnelerin yeni operatör kullanılarak oluşturulduğunu ve bellek tahsis edildiğini biliyoruz. Yeni bir operatör kullanılarak bir nesneye tahsis edilen bellek, referanslar bu nesneyi kullanana kadar tahsis edilmiş olarak kalır.
Referansların varlığı sona erer ermez, nesnenin kapladığı bellek geri kazanılır. Daha sonra Java, nesnelerin tahsisinin kaldırılmasını veya yok edilmesini otomatik olarak yönetir ve nesneyi açıkça imha etmemize gerek yoktur.
Bu teknik, programcıların nesnelerin serbest bırakılmasını açıkça ele almasına gerek olmayan Java'daki Çöp Toplama tekniğidir.
Programların, nesnelerin ihtiyacı olmadığında belleği ayırmaması durumunda, sonunda tahsis edilecek bellek kalmayacağını ve programların çökeceğini unutmayın. Bu duruma bellek sızıntısı denir.
Çöp toplayıcı her zaman bir arka plan iş parçacığı üzerinde arka planda çalışır. Garbage Collector, arka plan iş parçacığının en iyi örneği olarak kabul edilir.
Çöp Toplayıcı, yığın belleğini serbest bırakma niyetiyle çalışır. Bunu 'ulaşılamayan' nesneleri yok ederek yapar.
'Ulaşılamayan' Nesne Nedir?
Bir nesne, onunla ilişkili tek bir referans bile olmadığında erişilemez hale gelir.
Aşağıdaki kod parçasını düşünün:
Integer ref_obj = new Integer (5); //ref_obj is a reference to Integer ref_obj = null; //Integer object now becomes unreachable Yukarıdaki koddan görüldüğü gibi, bir nesneye bir referans onunla ilişkili olduğu sürece erişilebilir. Referans ilişkilendirmesi kaldırıldığı anda (yukarıdaki durumda null değerine bir ayar referansı) nesne erişilemez hale gelir.
Bir nesne erişilemez hale geldiğinde, Çöp Toplama (GC) için uygun hale gelir.
Bir nesneyi GC için uygun hale nasıl getirebiliriz?
Programcının nesneleri GC tarafından halledildiği için yok etmesi gerekmese de, en azından programcı bu nesneleri artık gerekmediğinde erişilemez hale getirebilir.
Bunu yaparak, GC ulaşılamayan nesneleri toplayacak ve yok edecektir.
Bir nesneyi erişilemez hale getirerek GC için uygun hale getirmenin bazı yolları vardır.
Onlar:
# 1) Referansı İptal Edin
Bir nesneye atanan bir referans verildiğinde, bu nesneye artık ihtiyaç duyulmuyorsa referansı null'a atayın.
Student s = new Student (); s = null; S null olarak ayarlandığında, Student nesnesine erişilemez hale gelir.
# 2) Referansı Yeniden Atayın
Bu, nesneleri GC için uygun hale getirmenin başka bir yoludur.
Aşağıdaki kodu düşünün.
Student s1 = new Student (); Student s2 = new Student (); s1 = s2; Şimdi s1'i başka bir nesneye atadığımız için, s1 tarafından referans verilen Student nesnesinin referansı kaldırılır.
# 3) Anonim Bir Nesne Oluşturun
Anonim bir nesne oluşturarak, nesneleri GC için uygun hale getirebiliriz.
Aşağıda gösterildiği gibi anonim bir nesne oluşturabiliriz:
new Student();Nesneleri GC için uygun hale getirdiğimizde, bu nesneler GC tarafından hemen yok edilebilir veya edilmeyebilir. Bunun nedeni, GC'yi istediğimiz zaman ve istediğimiz zaman çalıştırmaya açıkça zorlayamıyoruz.
Çöp Toplayıcı Ne Zaman Çalışır?
Çöp Toplayıcı programını çalıştırmak JVM'ye kalmıştır. JVM, Çöp Toplayıcıyı çalıştırdığında, ulaşılamayan nesneler yok edilir. Ancak yine de JVM'nin ne zaman çalışacağını garanti edemiyoruz.
GC'yi çalıştırmaya zorlayamasak da, bir Çöp Toplama talebinde bulunabiliriz.
GC, aşağıdaki yöntemlerden herhangi biri kullanılarak talep edilebilir.
# 1) System.gc (): Java'nın System sınıfı, JVM'den Garbage Collector'ı çalıştırmasını isteyebileceğimiz statik bir gc () yöntemi sağlar.
# 2) Runtime.getRuntime (). Gc (): System.gc () gibi, JVM'den Garbage Collector'ı çalıştırmasını istemek için 'Runtime sınıfı' nın gc () yöntemini de kullanabiliriz.
Not: Çöp Toplayıcının bu iki yöntemden gelen bir istek üzerine çalışacağına dair bir garanti yoktur.
Sonlandırma
Sonlandırma, nesneleri yok etmeden hemen önce Çöp Toplayıcı tarafından gerçekleştirilir. Sonlandırma tekniğinin bir parçası olarak, Garbage Collector nesnede finalize () yöntemini çağırır. Finalize () yöntemi, temizleme etkinliklerini gerçekleştirmek için kullanılır.
Finalize () yöntemi, 'Object' sınıfı tarafından sağlanır ve aşağıdaki prototipe sahiptir.
protected void finalize () throws Throwable Finalize () yöntemi, nesne her çöp toplandığında çağrılır
Not: Çöp toplayıcı yalnızca new anahtar sözcüğü kullanılarak oluşturulan nesneleri toplar. Diğer nesneler için, temizliği gerçekleştirmek için finalize () yöntemini kullanmalıyız.
Aşağıdaki program Java'da basit bir Çöp Toplama'yı göstermektedir.
class TestGC{ @Override // finalize method: called on object once // before garbage collecting it protected void finalize() throws Throwable { System.out.println('Garbage collector called'); System.out.println('Object garbage collected : ' + this); } } class Main{ public static void main(String args()){ TestGC gc1=new TestGC(); TestGC gc2=new TestGC(); gc1 = null; //nullify gc1 System.gc(); //request for GC to run gc2 = null; //nullify gc2 Runtime.getRuntime().gc(); //request for GC to run } }Çıktı

Yukarıdaki programda bir TestGC sınıfı oluşturduk. Bu sınıfta finalize () yöntemini geçersiz kıldık. Daha sonra ana sınıfta TestGC sınıfından iki nesne oluşturuyoruz. İlk olarak, bir nesneyi geçersiz kılıyoruz ve Çöp Toplayıcıyı istemek için System.gc () 'yi çağırıyoruz.
Sonra, ikinci nesneyi geçersiz kılıyoruz ve Çöp Toplayıcı'yı istemek için Runtime.getRuntime.gc () yöntemini çağırıyoruz. Çıktı, sonlandırma yöntemi çıktısını iki kez gösterir ve böylece Çöp Toplayıcının iki kez çalıştığını belirtir.
Not: Bu çıktıyı elde etmemize rağmen, her seferinde aynı çıktıyı alacağımızın garantisi yoktur. Tamamen JVM'ye bağlıdır.
Java'da Çöp Toplama Nasıl Çalışır?
Bu bölümde, Java'da Garbage Collection'ın nasıl çalıştığını göreceğiz.
Çöp toplama sırasında, Çöp Toplayıcı, Yığın belleğini arar ve ardından ulaşılamayan nesneleri 'işaretler'. Sonra onları yok eder.
Ancak sorun, nesne sayısı arttıkça ortaya çıkar. Nesneler arttıkça, ulaşılamayan nesneleri aradıkça Çöp Toplama için harcanan süre de artar. Ancak, nesnelerin çoğu kısa ömürlü olduğundan çok fazla etkilemez.
Yukarıdaki davranışa 'Nesil Çöp Toplama' ve JVM performansını iyileştirmesi beklenmektedir. Bu yaklaşımda, tüm Yığın alanı, Genç Nesil, Eski veya Tenured Nesil ve Kalıcı Nesil olarak ikiye ayrılır.
# 1) Genç Nesil Yığın Alanı: Tüm yeni nesneler bu alanda yaratılır. Alan dolduğunda, Minor GC gerçekleşir ve burada tüm ölü nesneler yok edilir. Küçük GC işlemi, çoğu nesne öldüğü için hızlı ve hızlıdır. Genç nesilde hayatta kalan nesneler daha eski nesillere taşınır.
# 2) Eski Nesil Yığın Alanı: Bu nesil, uzun süre hayatta kalan nesneleri saklar. Genç kuşak için belirlenen eşik yaşı karşılandığında, nesne eski kuşağa taşınır. Eski nesil alan doldurulduğunda, bir Majör GC gerçekleştirilir.
Burada yer alan nesneler canlı nesneler olduğundan, Major GC yavaştır. Bazen hem gençleri hem de eski nesilleri içeren tüm Yığın alanı temizlenir. Buna 'Tam GC' denir.
# 3) Kalıcı Üretim L Java 7'ye kadar bir Kalıcı Nesil (Perm Gen) vardı. Perm Gen tarafından tutulan meta veriler JVM tarafından kullanıldı. JVM, uygulamada kullanılan sınıfları ve yöntemleri tanımlamak için bu meta verileri kullandı. Perm Gen, Java 8'de kaldırıldı.
Java 8 Çöp Toplama: Perm Gen ve Metaspace
Java 7'ye kadar mevcut olan Perm Gen uzayından daha önce bahsetmiştik. Ancak şimdi Java 8'de JVM, 'Metaspace' adlı yerel belleği kullanan sınıf meta verilerini temsil ediyor.
Metaspace dışında, sınıf meta verileri için kullanılan belleği sınırlayan 'MaxMetaspaceSize' adında yeni bir bayrak vardır. MaxMetaspaceSize için değer belirtilmezse, Metaspace uygulama talebine göre çalışma zamanında bunu yeniden boyutlandırır.
Sınıf meta veri alanı MaxMetaspaceSize değerine ulaştığında, Metaspace GC tetiklenir. Aşırı Metaspace GC olduğunda, sınıfların, sınıf yükleyicilerin vb. Bellek sızıntısını ve yetersiz boyutlandırmayı gösterir.
Java'da Çöp Toplama Algoritmaları
Çöp Toplama işleminin gerçekleştirildiği çeşitli yollar vardır. Bu bölümde, Java'da Çöp Toplama için bu tür dört yol veya algoritma sunacağız.
Seri GC
Seri GC, en basit GC algoritmasıdır. Esas olarak küçük yığın boyutları ve tek iş parçacıklı sistemler üzerinde çalışır. Serial GC çalışırken tüm uygulamaları dondurur.
Seri GC'yi açmak için aşağıdaki JVM Seçeneğini kullanabiliriz.
deneyimli pdf için pl sql röportaj soruları ve cevapları
java –xx:+UseSerialGC –jar Application.javaYukarıdaki komut, komut satırında verilebilir. Burada Application.java, seri GC'nin etkinleştirileceği bir dosyadır.
Verimlilik / Paralel GC
Paralel GC algoritması, JDK 8'de varsayılandır. Bu algoritma, yığın alanını ve sıkıştırmayı taramak için birden çok iş parçacığı kullanır. Bu algoritma, çoğunlukla iş parçacığı duraklamalarını idare edebilen ve CPU ek yükünü optimize edebilen uygulamalar için uygundur.
Paralel GC'nin bir dezavantajı, küçük veya tam GC gerçekleştirirken, algoritmanın uygulama iş parçacıklarını duraklatmasıdır.
CMS Toplayıcı
CMS, ' Eşzamanlı İşaret Süpürme ”. Bu algoritma birden çok eşzamanlı yığını taramak için iş parçacığı ( işaret ) kullanılmayan nesneleri tanımlamak ve geri dönüştürmek için ( süpürme ) onları. CMS toplayıcı bir Stop-The-World (STW) moduna sahiptir.
Toplayıcı bu moda iki senaryoda girer:
- Eski nesle ait nesnelere statik değişkenlerden veya iplik giriş noktalarından ulaşılabilir. Dolayısıyla bu mod, ilk kök işaretlerinin başlatılması sırasında açıktır.
- Algoritma eşzamanlı olarak çalıştığında, uygulama durumu değiştirir ve toplayıcıyı doğru nesnelerin işaretlendiğinden emin olmak için geri gitmeye zorlar.
Bununla birlikte, CMS toplayıcı 'terfi başarısızlıkları' yaşayabilir. Peki promosyon başarısızlığı nedir? Genç kuşak mekândan gelen nesneler eski kuşağa taşınırsa ve toplayıcı eski kuşak yığın uzayında bu nesneler için yeterli yer açmazsa promosyon hatası oluşur.
Promosyon başarısızlığını önlemek için, toplayıcıya daha fazla arka plan dizisi sağlayabilir veya eski nesle daha fazla yığın boyutu sağlayabiliriz.
G1 Toplayıcı
G1 Toplayıcı 'Önce Çöp Toplayıcı' dır. 4GB'den büyük yığın boyutları için tasarlanmıştır. Yığın boyutuna bağlı olarak, yığın boyutunu 1 MB ile 32 MB arasında değişen boyutlara böler.
G1 toplayıcı, yığın boyunca nesnelerin canlılığına bağlı olarak nesneleri işaretler. Bu işaretleme aşamasından sonra G1 boş bölgelerin farkındadır. Böylece ulaşılamayan nesneleri bu bölgelerden toplayarak büyük miktarda alan serbest bırakır. Bu nedenle önce çöp içeren bölgeleri topladığı için Garbage-First olarak adlandırılır.
Ayrıca, belirlenen duraklatma süresi hedefine bağlı olarak toplanacak bölge sayısını seçerek bir duraklatma tahmin modeli kullanarak kullanıcı tanımlı duraklatma süresi hedefini karşılar.
Çöp Toplamanın Avantajı
- Çöp Toplama, programcının müdahalesi olmadan başvurulmayan nesneleri yığın bellekten kaldırdığından Java'daki bellek yönetimini verimli hale getirir.
- Çöp toplama otomatik olduğundan ve JVM'nin bir parçası olduğundan, programcının belleği geri kazanmak veya nesneleri yok etmek için fazladan çaba göstermesine gerek yoktur.
- C / C ++ 'da yapıldığı gibi, programcının hafızayı ayırmak ve nesneleri silmek için herhangi bir özel kod yazmasına gerek yoktur.
Sıkça Sorulan Sorular
S # 1) Çöp Toplayıcının rolü nedir?
Cevap: Java'da, Çöp Toplayıcı bellek yönetiminde ana taraftır ve ulaşılamayan nesneleri toplamak ve belleği geri kazanmakla görevlidir.
S # 2) Çöp Toplama ile neyi kastediyorsunuz?
Cevap: Çöp toplama, kullanılmayan belleği geri kazanarak belleğin otomatik olarak yönetildiği tekniktir. Java gibi programlama dillerinde bulunan bir özelliktir, çünkü programcıların kullanılmayan nesneleri takip etmesi ve yok etmesi gerekmez. Çöp Toplama kullanılarak otomatik olarak yapılır.
S # 3) Java'da Çöp Toplama'dan kim sorumludur?
Cevap: Java'nın bellek yönetimi, Çöp Toplama sorumluluğuna sahiptir.
S # 4) Java'da Çöp Toplamayı Nasıl Engelleyebiliriz?
Cevap: Çöp Toplayıcı canlı değişkenlerin / nesnelerin belleğini geri kazanmadığından, Çöp Toplamayı önlemenin en iyi yolu program boyunca değişkenleri / nesneleri kullanmaya devam etmektir.
S # 5) Bir nesnenin Çöp'ün toplandığından nasıl emin olabilirsiniz?
Cevap: Bir nesne, erişilemez olduğunda, yani nesneye daha fazla referans olmadığında, Çöp Toplama için uygundur. Çöp Toplayıcıyı istediğimiz zaman çalışmaya zorlayamasak da, System.gc () kullanarak her zaman çalışmasını isteyebiliriz.
Sonuç
Bu eğitimde tartıştığımız Java'daki Çöp Toplama işlemi otomatiktir ve programcının programda ayrılan nesneleri veya değişkenleri silmekle ilgilenmesine gerek yoktur.
Java'da Otomatik Çöp Toplama, dilin en önemli özelliğidir ve Java'da bellek yönetiminin bir parçasıdır.
Çöp Toplama işlemi JVM tarafından yapılsa ve programcının erişiminin dışında olsa da, Çöp Toplayıcının System ve Runtime sınıfının gc () yöntemini kullanarak çalışmasını her zaman isteyebiliriz.
Bu eğitimde, nesneler Çöp Toplayıcı tarafından yok edilmeden önce gerçekleştirilen sonlandırma sürecini tartıştık. Java'da Çöp Toplama sürecini de tartıştık. Son olarak, Çöp Toplayıcı tarafından kullanılan çeşitli algoritmaları tartıştık.
Bu, Java'da Çöp Toplayıcı ile ilgili tartışmamızı tamamlıyor.
=> Basit Java Eğitim Serisine Buradan Dikkat Edin.
Önerilen Kaynaklar
- Java Temel Bilgileri: Java Sözdizimi, Java Sınıfı ve Temel Java Kavramları
- Java Ne İçin Kullanılır: 12 Gerçek Dünya Java Uygulaması
- Java Dize Eğitimi | Örneklerle Java Dize Yöntemleri
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- Java Bileşenleri: Java Platformu, JDK, JRE ve Java Sanal Makinesi
- Java Dağıtımı: Java JAR Dosyasının Oluşturulması ve Yürütülmesi
- Java Sanal Makinesi: JVM, Java Uygulamasını Çalıştırmada Nasıl Yardımcı Olur?
- Örneklerle Java Yansıtma Eğitimi