Java'da, bellek yönetimi hayati bir süreçtir. Java tarafından otomatik olarak yönetilir. JVM belleği iki parçaya böler: yığın bellek ve yığın belleği. Java açısından bakıldığında her ikisi de önemli hafıza alanlarıdır ancak her ikisi de farklı amaçlar için kullanılır. Yığın belleği ve yığın belleği arasındaki büyük fark yığının, yöntem yürütme sırasını ve yerel değişkenleri depolamak için kullanılması, yığın belleğinin ise nesneleri saklaması ve dinamik bellek tahsisi ve serbest bırakmayı kullanmasıdır. Bu bölümde stack ve heap arasındaki farkları detaylı olarak tartışacağız.
Yığın Belleği
Yığın belleği, çalışma zamanında her iş parçacığına tahsis edilen fiziksel bir alandır (RAM'de). Bir iş parçacığı oluşturulduğunda oluşturulur. Yığındaki bellek yönetimi, küresel olarak erişilebilir olduğundan LIFO (Son Giren İlk Çıkar) sırasını takip eder. Değişkenleri, nesnelere referansları ve kısmi sonuçları saklar. Yığına ayrılan bellek, işlev geri dönene kadar yaşar. Yeni nesneleri oluşturmak için yer yoksa, fırlatır.java.lang.StackOverFlowError. Elemanların kapsamı iş parçacıklarıyla sınırlıdır. JVM her iş parçacığı için ayrı bir yığın oluşturur.
Yığın Belleği
JVM başlatıldığında oluşturulur ve uygulama çalıştığı sürece uygulama tarafından kullanılır. Nesneleri ve JRE sınıflarını saklar. Ne zaman bir nesne yaratsak, yığın hafızasında yer kaplar ve o nesnenin referansı yığında oluşturulur. Yığın gibi herhangi bir sırayı takip etmez. Bellek bloklarını dinamik olarak işler. Bu, hafızayı manuel olarak işlememize gerek olmadığı anlamına geliyor. Belleği otomatik olarak yönetmek için, Java artık kullanılmayan nesneleri silen çöp toplayıcıyı sağlar. Yığına ayrılan bellek, program sonlandırılan veya boş bellek oluşmayan herhangi bir olay oluşana kadar yaşar. Öğelere uygulamadan küresel olarak erişilebilir. Tüm iş parçacıklarıyla paylaşılan ortak bir hafıza alanıdır. Yığın alanı doluysa, atarjava.lang.OutOfMemoryError. Yığın belleği ayrıca aşağıdaki bellek alanlarına bölünmüştür:
- Genç nesil
- Hayatta kalan alanı
- Eski nesil
- Kalıcı nesil
- Kod Önbelleği
Aşağıdaki resimde yığın belleğinin ve yığın alanının tahsisi gösterilmektedir.
Yığın ve Yığın Belleği Arasındaki Fark
Aşağıdaki tabloda yığın belleği ile yığın alanı arasındaki tüm önemli farklar özetlenmektedir.
Parametre | Yığın Belleği | Yığın alanı |
---|---|---|
Başvuru | gibi çok kısa ömürlü eşyaları saklar. yöntemler, değişkenler, Ve referans değişkenleri nesnelerin. | Depolar nesneler ve Java Çalışma Zamanı Ortamı ( JRE ) sınıflar. |
Sipariş verme | Aşağıdakileri takip eder LİFO emir. | Dinamik bir bellek tahsisi olduğundan ve bellek bloklarının tahsisi ve tahsisinin kaldırılması için herhangi bir sabit modele sahip olmadığından herhangi bir sıra izlemez. |
Esneklik | Bu esnek değil çünkü ayrılan hafızayı değiştiremeyiz. | Bu esnek çünkü ayrılan hafızayı değiştirebiliriz. |
Yeterlik | Var Daha hızlı erişim, tahsis ve tahsisin kaldırılması. | Var Yavaş erişim, tahsis ve tahsisin kaldırılması. |
Hafıza boyutu | Bu daha küçük boyutunda. | Bu daha büyük boyutunda. |
Kullanılan Java Seçenekleri | JVM seçeneği -Xss'yi kullanarak yığın boyutunu artırabiliriz. | -Xmx ve -Xms JVM seçeneklerini kullanarak yığın bellek boyutunu artırabilir veya azaltabiliriz. |
Görünürlük veya Kapsam | Değişkenler yalnızca sahibi iş parçacığına görünür. | Tüm iş parçacıkları tarafından görülebilir. |
Uzay Üretimi | Bir iş parçacığı oluşturulduğunda, işletim sistemi yığını otomatik olarak tahsis eder. | Uygulama için yığın alanı oluşturmak için dil öncelikle çalışma zamanında işletim sistemini çağırır. |
Dağıtım | Her nesne için ayrı yığın oluşturulur. | Tüm threadler arasında paylaştırılır. |
İstisna Atar | JVM fırlatır java.lang.StackOverFlowError yığın boyutu sınırdan büyükse. Bu hatayı önlemek için yığın boyutunu artırın. | JVM fırlatır java.lang.OutOfMemoryError JVM yeni bir yerel yöntem oluşturamıyorsa. |
Tahsis / Tahsis | tarafından otomatik olarak yapılır. derleyici . | Tarafından manuel olarak yapılır. programcı . |
Maliyet | Onun maliyeti az . | Onun maliyeti Daha yığınla karşılaştırıldığında. |
Uygulama | Onun uygulanması zor . | Onun uygulanması kolay . |
Tahsis sırası | Bellek tahsisi: sürekli . | Ayrılan bellek rastgele emir. |
İplik Güvenliği | Her iş parçacığının kendi yığını olduğundan iş parçacığı açısından güvenlidir. | İş parçacığı açısından güvenli değildir, bu nedenle kodun düzgün şekilde eşitlenmesi gerekir. |