Java Sanal Makinesi - Çalışma Zamanı Veri Alanları
JVM spesifikasyonu, programın yürütülmesi sırasında ihtiyaç duyulan belirli çalışma zamanı veri alanlarını tanımlar. Bazıları JVM başlarken oluşturulur. Diğerleri evreler için yereldir ve sadece bir evre oluşturulduğunda oluşturulur (ve evre yok edildiğinde yok edilir). Bunlar aşağıda listelenmiştir -
PC (Program Sayacı) Kaydı
Her evre için yereldir ve iş parçacığının halihazırda yürütmekte olduğu JVM talimatının adresini içerir.
Yığın
Her evre için yereldir ve yöntem çağrıları sırasında parametreleri, yerel değişkenleri ve dönüş adreslerini depolar. Bir iş parçacığı izin verilenden daha fazla yığın alanı talep ederse bir StackOverflow hatası oluşabilir. Yığın dinamik olarak genişletilebilirse, yine de OutOfMemoryError atabilir.
Yığın
Tüm evreler arasında paylaşılır ve çalışma zamanı sırasında oluşturulan nesneleri, sınıfların meta verilerini, dizileri vb. İçerir. JVM başladığında oluşturulur ve JVM kapandığında yok edilir. JVM'nizin işletim sisteminden talep ettiği yığın miktarını belirli bayrakları kullanarak kontrol edebilirsiniz (bu konu hakkında daha sonra daha fazlası). Önemli performans etkilerine sahip olduğu için hafızanın çok az veya çok fazlasını talep etmemeye özen gösterilmelidir. Ayrıca, GC bu alanı yönetir ve alanı boşaltmak için sürekli olarak ölü nesneleri kaldırır.
Yöntem Alanı
Bu çalışma zamanı alanı tüm iş parçacıkları için ortaktır ve JVM başladığında oluşturulur. Sabit havuz (bundan sonra daha fazlası), yapıcılar ve yöntemler için kod, yöntem verileri vb. Gibi sınıf başına yapıları depolar. JLS, bu alanın çöp toplanması gerekip gerekmediğini ve dolayısıyla JVM, GC'yi göz ardı etmeyi seçebilir. Ayrıca, bu, uygulamanın ihtiyaçlarına göre genişleyebilir veya genişlemeyebilir. JLS, bununla ilgili hiçbir şeyi zorunlu kılmamaktadır.
Çalışma Zamanı Sabit Havuzu
JVM, yüklenen sınıfları bağlarken sembol tablosu (birçok rolünden biri) olarak görev yapan sınıf başına / tür başına veri yapısını korur.
Yerel Yöntem Yığınları
Bir iş parçacığı yerel bir yöntemi çağırdığında, Java sanal makinesinin yapılarının ve güvenlik kısıtlamalarının artık özgürlüğünü engellemediği yeni bir dünyaya girer. Yerel bir yöntem, sanal makinenin çalışma zamanı veri alanlarına büyük olasılıkla erişebilir (yerel yöntem arabirimine bağlıdır), ancak istediği her şeyi de yapabilir.
Çöp toplama
JVM, Java'daki nesnelerin tüm yaşam döngüsünü yönetir. Bir nesne oluşturulduktan sonra, geliştiricinin artık onun için endişelenmesine gerek yoktur. Nesnenin ölmesi durumunda (yani, artık ona referans yok), birçok algoritmadan biri olan seri GC, CMS, G1, vb. Kullanılarak GC tarafından yığından çıkarılır.
GC işlemi sırasında nesneler belleğe taşınır. Bu nedenle, bu nesneler işlem devam ederken kullanılamaz. İşlem süresince tüm uygulama durdurulmalıdır. Bu tür duraklamalara 'dünyayı durdur' duraklamaları denir ve çok büyük bir ek yüktür. GC algoritmaları öncelikle bu süreyi azaltmayı amaçlamaktadır. Bunu ilerleyen bölümlerde ayrıntılı olarak tartışacağız.
GC sayesinde, Java'da bellek sızıntıları çok nadirdir, ancak olabilirler. İlerleyen bölümlerde Java'da nasıl bellek sızıntısı yaratılacağını göreceğiz.