Java ME bellek durumu istatistikleri

____________________________________________________________________

cep telefonları gibi düşük miktarda belleğe sahip cihazlarda çalıştığından bunlarda bellek yönetimi önemlidir. Aslında Java çöp toplayıcısı (Garbage Collector) sayesinde bu işi otomatik yapıyor ama çöp toplayıcı sadece kullanılabilir Java belleği dolduğunda devreye girip referanssız nesneleri siliyor. Bu da uygulamada oyun vs. yoğun işlemci kullanımı olan uygulamalarda kısa süreliğine donmaya sebep olabiliyor. Bunu bir miktar kendi kontrolümüz altına almak için bellek durumu bilgilerine ihtiyacımız olabilir. Veya geliştirdiğimiz uygulamanın bellek ihtiyacı ile ilgili uyumluluğunu kontrol etmek için bellek bilgilerine ihtiyacımız olabilir. , Java uygulamasını kullanabileceği bellek miktarı ile ilgili basit iki değeri vermektedir; toplam bellek ve boş bellek miktarı.

Java ME bize aygıtın toplam fiziksel bellek (RAM) miktarını söylemez. Sadece o uygulama veya (sanal makine türüne göre) diğer Java uygulamalarının birlikte nesneleri saklayabilecekler bellek miktarını gösterir, yani referanslar için vs. kullanılan bellek gösterilmez. Bu sebeple cihazın kendi bellek miktarından azdır ve alakasız da olabilir.

Java ME’de bellek bilgileri Runtime.getRuntime() ile alınır. Toplam bellek totalMemory() ve boş bellek de freeMemory() yöntemleri çağrılarak alınır. Kullanım;

Runtime.getRuntime().totalMemory();

şeklinde olabilir veya

Runtime rt = Runtime.getRuntime(); rt.totalMemory();

şeklinde olabilir.

Bellek miktarları long olarak döner.

Aşağıdaki örnek bir forma bellek bilgilerini yazıyor. Bayt olarak long değeri alınan sayı 1024’e bölünerek kilobayt değeri hesaplanıyor.

public void bellekDurumunuGoster()
{
Form form = nw Form("Bellek bilgileri");
Runtime rt=Runtime.getRuntime() ;
form.append("Toplam bellek:\n");
form.append(rt.totalMemory() / 1024 + " KB");
form.append("Boş bellek:\n");
form.append(rt.freeMemory() / 1024 + " KB");
form.append("Kullanılan bellek:\n");
System.out.println(rt.totalMemory()-rt.freeMemory() / 1024 + " KB");
Display.getDisplay(this).setCurrent(form);
}

Çöp toplayıcıyı (Garbage Collector) çağırmak:

Nesnelerimiz belleği tamamen doldurmadan belleği temizlemek istersek bunun için artık ihtiyacımız olmayan nesnelere null değer vererek (Ör; string adında bir String nesnemiz var, buna string = null; (Osmanlı Dev. zamanında karıya boşol demek gibi birşey 🙂 ) dediğimizde string referansı artık bir nesneyi referans göstermez, dolayısıyla o nesne de kullanılamaz ve çöp toplayıcı tarafından toplanabilr olur. 🙂 ) öldürmeli ve çöp toplayıcıyı çağırmalıyız. Çöp toplayıcı şu iki yöntemle çağrılabilir:

  1. Runtime.getRuntime().gc();
  2. System.gc();