Java Bellek: Öbek Uzay ve Çöp Toplayıcı

Java yığın alanı ve çöp toplama yoluyla belleği yönetir öğrenin. Bellek ayırma anlama Java programlarında bellek sızıntısı önlemek yardımcı olabilir.

A+ A-

Son zamanlarda, ben çalıştırdığınızda, biraz gerektiren bir Java uygulaması yazdım belleğe ve ben OutOfMemory hatayı almaya başladı:

 Hata: java.lang.OutOfMemoryError: Java yığın alanı 

biz hafıza yakan programları çalıştırmak için gerektiğinde bu sık sık olur. Aşağıdaki tür sorunları çözmek için birkaç yolu vardır.

Java yığın alanı nedir?

Her şeyden önce, yığın boşluk ne olduğunu anlamak sağlar. Eh, Java ağırlıklı düzenlemelerinde hafızayı kullanır yığından . Java geçirilen parametreleri tutan bir adlandırılan yönteme arama yöntemi (diğer bir deyişle parametreleri gereksinimlerine göre yığının dışarı itilir ve attı edilir) bir yığın yapısı şeklinde,. Öte yandan, yığın Java oluşturur ve nesneleri tutan bir rastgele erişilen bellek alanıdır. o nesneyi içermesi için yeterli yer bulur her yerde Java bu yığın alanı içinde nesne oluşturur. Yeni bir nesne oluşturmak zaman, (örneğin yeni String () ;) nesne yığın alanında oluşturulan ve sığabilir belleği kaplar alır. çöp toplama sırasında, Java artık başvurulan bu nesnelerin yığın alanını boşaltır. Başvurulan sayısı (yani “Gerekli”) nesneler artırmaya tutar ve onları itaat etmezsek -the JVM yığın alanı biterse.

Bir sınıf gerektirecektir bellek miktarı veri üyelerinin sayısı ve türüne bağlıdır.

  1. Sınıf kendisi 8 bayt az gerektirir
  2. Her veri üyesi 4 bayt (uzun ve çift 8 bayt gerektirir) gerektirir. Hatta bir Boole değişkeni sadece kayıtlı almak bir bit ihtiyacı olsa 4 bayt kullanmaktır.
  3. Kullanılan belleğin miktarı 8 bayt parçalarını yetişir
Java programları optimize

Bu sorunu aşmak için ilk adım programı aracılığıyla gidin ve daha az bellek kullanmasına hale getirecek kadar onu modifiye edilebilir görmek olmalıdır. Uzun yana bellek maliyeti 1960'larda ne kıyasla son derece düşük olmuştur. Ve programcılar kendi programlarına bellek indirimi açısından oldukça abartılı hale gelmiştir. Ancak yine de, daha sık değil, biz daha fazla belleğe ihtiyaç programlar yazmak gerekir. o programın çökmesi olasılığını azaltır hem de bazen yürütme hızını artırır çünkü sadece bellek kullanımı bağlamında Tutumluluk her zaman iyidir.

Artık kodunuzda gerekli olduğunda boş nesneleri koymalıdır. Eğer nesne (ler) oluşturmak ancak daha sonra gerekli olmadığı durumlarda onları atmayın hangi bir döngü çalıştırıyorsanız bu daha da önemlidir.

Java çöp toplayıcısı yönteminin yararlanın

Bellek kullanımı optimizasyonu yönelik ikinci adım açıkça Çöp Toplama yöntemi çağırmak için olabilir. Java otomatik olarak gerekli ve bu yöntemi çağırır ve artık başvurulan nesneleri içeren bellek alanını boşaltır. Ama aynı zamanda kodunuzda açıkça bu yöntemi çağırabilirsiniz (örneğin, bir yapılır “büyük görev” ve sonraki “büyük görev” sonra başlamak üzere). , Çöp toplayıcısı çağırmak için kullanın:

 Runtime.getRuntime () GC (.); 

Daha önce ve gc () yöntemi çağrıldıktan sonra bellek durumunu izleyebilirsiniz.

 System.out.println ( "nnCalling Çöp Collectornn");
System.out.println ( "Boş bellek ÖNCE:" + Runtime.getRuntime () freeMemory ().);
Runtime.getRuntime () GC (.);
System.out.println ( "SONRA Boş bellek:". + Runtime.getRuntime () freeMemory ());
System.out.println ( "nnGarbage toplama finishednn"); 

freememory () metodu bayt ölçülen serbest bellek miktarını verir. Süre sınıfı tarafından sağlanan diğer yöntemleri için bkz Java API

JVM için daha fazla bellek ver

bellek kullanımı optimizasyon bakılmaksızın için çabalar, bazen JVM gerçekten daha fazla bellek ihtiyacı yok. Böyle durumlarda biz bellek belirli bir miktar kullanmak için komut satırı üzerinden JVM söyleyebilir:

 java -Xms2000m -Xmx3500m 

-Xms ve -Xmx JVM makinenizde kullanabileceği takas alanı (sanal belleğin) miktarını belirtmek geçer.

Bellek -Xms az belirtir (yani, ilk) miktarı,

-Xmx JVM kullanabilirsiniz maksimum bellek miktarını belirtir.

Bunlar bellek değerleri megabayt olarak belirtilmelidir.

Java yığın alanı ve çöp toplama mekanizması yoluyla belleği yönetir hakkında Yani, bu oldu. Bu akıllı seçimler ve her Java programcısı Java bellek nasıl işleyeceğini net bir anlayışa sahip olmalıdır. Sadece verimli bellek yoğun programları üzerinde çalışmak mümkün olacak.