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: