Bellek Yönetimi Java

⚡ Akıllı Özet

Bellek Yönetimi Java JVM'nin çalışma zamanı belleğini Stack, Heap ve diğer bellek türleri arasında nasıl böldüğünü açıklar. CodeAyrıca, statik bölgeler, metot çağrıları sırasında nesne referanslarının nasıl aktığı ve çöp toplayıcının erişilemeyen nesneleri nasıl geri kazandığı, böylece uygulamaların istikrarlı kalması ve bellek sızıntılarından arınması gibi konuları da ele almaktadır.

  • ???? JVM Bellek Düzeni: Java Bellek, nesneler için yığın (Heap), metot çerçeveleri ve yerel değişkenler için yığın (Stack) ve ayrıca bayt kodu ve statik veriler için ayrılmış alanlara bölünmüştür.
  • 📚 Yığın (Stack) ve Öbek (Heap) Karşılaştırması: Yığın (Stack) çerçeveleri Son Giren İlk Çıkar (LIFO) sırasını izler ve temel veri tiplerini ve referansları depolar; yığın (Heap) ise `new` operatörüyle oluşturulan her nesneyi tutar.
  • ♻️ Çöp toplama: Çöp Toplayıcı tracks, referans zincirleri aracılığıyla erişilebilirliği sağlar ve hiçbir iş parçacığının erişemediği nesnelerden belleği otomatik olarak geri kazanır.
  • Modern Koleksiyoncular: Üretim iş yükleri, çok gigabaytlık yığınlar genelinde düşük duraklamalı toplama için giderek daha fazla G1, ZGC ve Shenandoah'a güveniyor.
  • 🧪 Uygulamalı Örnek: Öğrenci sınıfının adım adım anlatımı, referansların ne zaman koleksiyon için uygun hale geldiğini ve referansların sıfırlanmasının altta yatan nesneyi nasıl serbest bıraktığını gösterir.

Bellek Yönetimi Java

Yığın Belleği nedir? Java?

Yığın belleği Java Yığın, her iş parçacığı için metot çerçevelerini, yerel değişkenleri ve referans değişkenlerini depolayan JVM bellek bölgesidir. Yığına her zaman Son Giren İlk Çıkar (LIFO) sırasına göre erişilir, bu nedenle en son çağrılan metot en üstte yer alır ve yerel değişkenleri çerçeveyle birlikte itilir ve çıkarılır.

Her bir iplikçik Java Sanal makine kendi yığınına sahiptir; bu da metot çağrılarını tasarım gereği izole ve iş parçacığı güvenli tutar. int, boolean ve double gibi temel yerel değişkenler doğrudan çerçeve içinde yer alırken, yığında saklanan nesne referansları yığında ayrılan nesnelere işaret eder.

Yığın Bellek (Heap Memory) nedir? Java?

Yığın belleği, her veriyi tutan paylaşılan JVM bölgesidir. Java Yeni operatör ile oluşturulan nesne ve diziler, bu nesnelere ait referans değişkenleriyle birlikte örnek alanlar olarak saklanır. Yığın'ın aksine, yığın tüm iş parçacıkları arasında paylaşılır; bu nedenle nesne erişimi genellikle senkronizasyon gerektirir.

Yığın (Heap), Çöp Toplayıcı'nın yönettiği alandır. Modern HotSpot JVM'ler, yığını kısa ömürlü nesneler için Genç Nesil (Young Generation) ve uzun ömürlü nesneler için Eski Nesil (Old Generation) olmak üzere ikiye ayırır; sınıf meta verileri ise Metaspace adı verilen ayrı bir yerel bölgede saklanır.

Bellek Ayırma Java

Bellek Ayırma Java Bu, JVM'nin program yürütülmesi sırasında değişkenler, sınıf ve yapı örnekleri için sanal bellek bölgeleri ayırma işlemidir. Bellek, nesneye bildirim sırasında tahsis edilmez; yalnızca bir referans oluşturulur. Gerçek nesne tahsisi `new` operatörü aracılığıyla gerçekleşir, bu nedenle her nesne yığında bulunur.

MKS Java Bellek tahsisi aşağıdaki bölümlere ayrılmıştır:

  1. yığın
  2. Yığın
  3. Code
  4. Statik

Belleğin bu şekilde bölümlenmesi, çalışma zamanının etkili bir şekilde yönetilmesi için gereklidir.

  • MKS Code Bu bölüm derlediğiniz bilgileri içerir. baytkodu.
  • MKS Yığın bölüm mağazaları yöntemler, yerel değişkenler ve referans değişkenler.
  • MKS yığın bölüm içerir nesneler ve ayrıca örnek alanlar olarak tutulan referans değişkenlerini de içerebilir.
  • MKS Statik bölüm tutuyor statik veri ve statik yöntemler Tüm örneklerde paylaşılır.

Yerel ve Örnek Değişken arasındaki fark

JVM'de her bir değişken türünün nerede bulunduğunu anlamak, yığın (stack) ve öbek (heap) davranışını açıklamaya yardımcı olur. örnek değişkeni ilan edildi bir sınıfın içinde ancak herhangi bir metodun dışındave nesnenin bir parçası olarak Yığın üzerinde yaşamaya devam ediyor.

class Student{ 
int num; // num is instance variable 
public void showData{}

A yerel değişken ilan edildi Bir metodun içinde, metot argümanları da dahil olmak üzereve aktif çerçeve içindeki yığında yer alır.

public void sum(int a){

int x = a + 3;

// a, x are local variables

}

Yığın ve Yığın Arasındaki Fark

JVM içinde Stack ve Heap farklı sorunları çözer. Stack, her iş parçacığına metot kapsamına bağlı kısa ömürlü veriler için hızlı ve deterministik tahsis sağlarken, Heap ise herhangi bir iş parçacığının referans verebileceği uzun ömürlü nesneler için paylaşılan bir alan sağlar. Aşağıdaki kısa video, takip eden adım adım açıklamadan önce bu iki kavram arasındaki farkı özetlemektedir.

Tıkla okuyun videoya erişilemiyorsa

Stack ve Heap'in nasıl işbirliği yaptığını görmek için, m1 metodunu çağıran bir main metodunu ele alalım.

public void m1{
int x = 20;
}

JVM yığınında, m1 metodu için bir çerçeve oluşturulur.

Java Yığın ve Yığın

Aşağıdaki resimde gösterildiği gibi, m1'deki x değişkeni de Stack üzerindeki m1 çerçevesinde oluşturulur.

Java Yığın ve Yığın

Ardından m1 metodu m2 metodunu çağırır. Yığında, m1'in çerçevesinin üzerine m2 için yeni bir çerçeve oluşturulur.

Java Yığın ve Yığın

Java Yığın ve Yığın

Yerel değişkenler b ve c de Stack üzerindeki m2 için çerçeve içerisinde oluşturulur.

public void m2(int b){
boolean c;
}

Ardından, m2 metodu m3 metodunu çağırır. Yine, aşağıda gösterildiği gibi, yığının en üstünde m3 için bir çerçeve oluşturulur.

Java Yığın ve Yığın

Java Yığın ve Yığın

Şimdi diyelim ki m3 metodu, iki bileşene sahip Account sınıfı için bir nesne oluşturuyor. örnek değişkenler int p ve int q.

class Account {
    int p;
    int q;
}

İşte m3 metodunun kodu.

public void m3(){
    Account ref = new Account();
    // more code
}

`new Account()` ifadesi, Heap üzerinde bir Account nesnesi oluşturur.

Java Yığın ve Yığın

Referans değişkeni ref, m3 için çerçeve içindeki Stack üzerinde oluşturulur.

Java Yığın ve Yığın

Atama operatörü, referans değişkeninin yığındaki nesneye işaret etmesini sağlar.

Java Yığın ve Yığın

Metodun yürütülmesi tamamlandıktan sonra, kontrol çağıran metoda, yani bu durumda m2 metoduna geri döner.

Java Yığın ve Yığın

m3 metoduna ait çerçeve yığından temizlendi.

Java Yığın ve Yığın

Referans değişkeni artık yığındaki nesneyi işaret etmediğinden, o nesne çöp toplama işlemine uygun hale gelir.

Java Yığın ve Yığın

m2 metodu tamamlandığında, yığından çıkarılır ve tüm değişkenleri kullanılamaz hale gelir. Aynı durum m1 metodu için de geçerlidir ve sonunda kontrol ana metoda geri döner.

Peki ya bir nesne, örnek değişkeni olarak başka bir referansı tutarsa?

public static void main(String args[]) {
    A parent = new A();
    // more code
}
class A {
    B child = new B();
    int e;
}
class B {
    int c;
    int d;
}

Bu durumda, referans değişkeni olan child, A nesnesinin bir parçası olarak Heap üzerinde yer alır ve aşağıda gösterildiği gibi kendi B nesnesine işaret eder.

Java Yığın ve Yığın

Çöp Toplama Nedir? Java?

Çöp Toplama Java JVM'nin bellek yönetimini otomatik olarak gerçekleştirdiği süreçtir. Çöp toplayıcı, artık herhangi bir canlı referanstan erişilemeyen nesneleri bulur ve belleklerini geri kazanır. Dinamik bellek tahsisi, `new` operatörü aracılığıyla gerçekleşir ve bellek, program nesneye herhangi bir referans tutmadığı ana kadar tahsis edilmiş olarak kalır.

Hiçbir referans kalmadığında, nesnenin artık gerekli olmadığı kabul edilir ve kapladığı bellek geri kazanılabilir. Bir nesneyi yok etmek için açık bir gereklilik yoktur çünkü Java Atık toplama işlemi, çöp toplama mekanizması aracılığıyla otomatik olarak gerçekleştirilir.

Bunun ardındaki teknik şu şekilde bilinir: Çöp toplamaBelleği serbest bırakmayı başaramayan programlar, tahsis edilecek hiçbir şey kalmadığında sonunda çöker. Bu tür programlara bellek yetersizliğinden kaynaklanan sorunlar denir. bellek sızıntıları. Çöp Toplama Java otomatik olarak çalışır Programın ömrü boyunca, manuel tahsisat kaldırma yükünü ortadan kaldırır ve sızıntı riskini azaltır.

C dilinde ise bunun aksine, programcı free() fonksiyonu aracılığıyla dinamik olarak ayrılan belleği serbest bırakmaktan sorumludur. İşte bu noktada devreye giriyor. Java Bellek yönetimi önemli bir avantaj sunuyor.

Modern HotSpot JVM'ler, farklı iş yükleri için optimize edilmiş çeşitli Çöp Toplayıcılar (Garbage Collector) içerir. Varsayılan G1 Çöp Toplayıcı, çok gigabaytlık yığınlarda dengeli verim ve duraklama sürelerini hedefler. ZGC ve Shenandoah ise çok büyük yığınlarda milisaniyenin altında duraklama süreleri hedefleyerek, bu özellikleri en üst seviyeye çıkarır.tracGecikmeye duyarlı hizmetler için idealdir. Doğru toplayıcıyı seçmek ve Genç Nesil, Eski Nesil ve Metaspace boyutlarını ayarlamak temel bir beceridir. Java Performans çalışması.

Not: Tüm nesneler, çöp toplayıcının yönettiği bellek alanı olan yığın (Heap) bölümünde oluşturulur.

Örnek: Çöp Toplama Mekanizmasını Öğrenmek Java

Bu kılavuz, basit bir programda referansların ne zaman çöp toplama işlemine uygun hale geldiğini göstermektedir.

) 1 Adım Aşağıdaki kodu bir editöre kopyalayın.

class Student{
int a;
int b;
  public void setData(int c,int d){
    a=c;
    b=d;
  }
  public void showData(){
    System.out.println("Value of a = "+a);
    System.out.println("Value of b = "+b);
  }
  public static void main(String args[]){
    Student s1 = new Student();
    Student s2 = new Student();
    s1.setData(1,2);
    s2.setData(3,4);
    s1.showData();
    s2.showData();
    //Student s3;
    //s3=s2;
    //s3.showData();
    //s2=null;
    //s3.showData();
    //s3=null;
    //s3.showData();
  }
}

) 2 Adım Kodu kaydedin, derleyin ve çalıştırın. Şemada gösterildiği gibi, iki nesne ve iki referans değişkeni oluşturulur.

 Çöp Toplama Mekanizması

) 3 Adım 20, 21 ve 22. satırların yorum satırlarını kaldırın. Kodu kaydedin, derleyin ve çalıştırın.

) 4 Adım Aşağıdaki şemada gösterildiği gibi, iki referans değişkeni artık aynı nesneye işaret etmektedir.

Çöp Toplama Mekanizması

) 5 Adım 23. ve 24. satırların yorum satırlarını kaldırın. Kodu kaydedin, derleyin ve çalıştırın.

) 6 Adım Aşağıda gösterildiği gibi, s2 boş değer alır, ancak s3 hala nesneye işaret eder, bu nedenle nesne henüz Çöp Toplama için uygun değildir.

 Çöp Toplama Mekanizması

) 7 Adım 25. ve 26. satırların yorum satırlarını kaldırın. Kodu kaydedin, derleyin ve çalıştırın.

) 8 Adım Bu aşamada, nesneye işaret eden hiçbir referans kalmadığı için çöp toplama işlemine tabi tutulmaya uygun hale gelir. Çöp toplayıcı onu bellekten kaldırır ve geri alma imkanı kalmaz.

 Çöp Toplayıcıyı Öğrenin

Bir nesneyi nasıl silerim? Java?

Java Manuel silme operatörü sağlamadığından, standart yaklaşım, çöp toplayıcının onu geri kazanabilmesi için nesneye yapılan tüm referansları kaldırmaktır.

1) Bir nesneyi çöp toplama işlemine uygun hale getirmek için, o nesneye işaret eden tüm referans değişkenlerine null değeri atayın.

2) Temel veri tipleri nesne değildir, bu nedenle onlara null değeri atanamaz. Çevreleyen yığın çerçevesi kaldırıldığında depolama alanları otomatik olarak geri kazanılır.

Bir nesne nasıl silinir Java

SSS

Yığın (Stack), her iş parçacığı için son giren ilk çıkar (LIFO) sırasına göre metot çerçevelerini, yerel değişkenleri ve referansları depolar. Öbek (Heap) ise new ile oluşturulan tüm nesneleri depolar ve iş parçacıkları arasında paylaşılır; bu nedenle çöp toplayıcı (Garbage Collector) tarafından yönetilir.

Çöp Toplayıcı, aktif iş parçacıkları ve statik alanlar gibi GC köklerinden referans zincirlerini tarar. Bir kökten ulaşılamayan herhangi bir nesne, ulaşılamaz olarak kabul edilir ve bir sonraki toplama döngüsünde geri kazanılmaya uygun hale gelir.

Genç Nesil, Eden ve Survivor alanlarında kısa ömürlü nesneleri tutar. Eski Nesil ise birden fazla koleksiyondan sağ kurtulan nesneleri tutar. Metaspace, sınıf meta verilerini depolayan ve eski PermGen'in yerini alan yerel bir bellek bölgesidir. Java 8.

G1 varsayılan seçenektir ve çok gigabaytlık bellek yığınlarında çoğu iş yükü için uygundur. ZGC ve Shenandoah, çok büyük bellek yığınlarında milisaniyenin altında duraklamaları hedefler ve gecikmeye duyarlı hizmetler için iyi seçeneklerdir. Java 17 veya üstü.

Nesneye işaret eden her referansı null olarak ayarlayın veya referansların yığın çerçeveleri kaldırıldığında kapsam dışına çıkmasına izin verin. Nesneye ulaşan hiçbir canlı referans kalmadığında, Çöp Toplayıcı yığın belleğini geri kazanır.

Evet. Yapay zeka destekli ayarlama araçları, yığın boyutlarını, toplayıcı bayraklarını ve Genç Nesil oranlarını önermek için GC günlüklerini, tahsis oranlarını ve duraklama histogramlarını analiz eder. Özellikle G1, ZGC ve Shenandoah iş yüklerinde manuel ayarlamaya kıyasla geri bildirim döngüsünü kısaltırlar.

Yapay zekâ tabanlı gözlemlenebilirlik platformları, bellek dökümlerini ve canlı metrikleri alır, ardından şüpheli sınıfları ve referans zincirlerini işaretlemek için saklanan nesne grafiklerini kümeler. Bu, sızıntı adaylarını manuel bellek analizinden daha hızlı bir şekilde ortaya çıkarır ve ekiplerin üretimde temel nedeni belirlemesine yardımcı olur.

Bu yazıyı şu şekilde özetleyin: