2011-06-02 10 views
10

Java programımın ne kadar belleğe sahip olduğunu hesaplamaya çalışıyorum.Java'da kullanılabilir belleği hesaplamanın en iyi yolu nedir?

long getAvailableMemory() { 
    Runtime runtime = Runtime.getRuntime(); 
    long totalMemory = runtime.totalMemory(); 
    long freeMemory = runtime.freeMemory(); 
    long maxMemory = runtime.maxMemory(); 
    long usedMemory = totalMemory - freeMemory; 
    long availableMemory = maxMemory - usedMemory; 
    return availableMemory; 
} 

Öyle mi: Bu mevcut uygulamasını var? Bu bilgiyi hesaplamanın daha kolay/daha doğru bir yolu var mı?

long getAvailableMemory() { 
    long totalVmHeap = Runtime.getRuntime().totalMemory(); 
    long freeVmHeap = Runtime.getRuntime().freeMemory(); 
    long usedVmHeap = totalVmHeap - freeVmHeap; 
    long maxVmHeap = Runtime.getRuntime().maxMemory(); 
    long availableVmHeap = maxVmHeap - usedVmHeap + freeVmHeap; 
    return availableVmHeap; 
} 

Neyse, bu bilgilere ulaşmak için doğru yolu budur: başkasının kod baktıktan sonra ben biraz farklıdır böyle bir şey gördü?

+1

Çözümünüz bana doğru görünüyor. – Adrian

+0

Aynı olduklarını sanıyordum ama şimdi 2. görüntünün size verdiğini görüyorum (max - toplam). – trutheality

+1

Sanırım sorununun bir kısmını bir cevap olarak vermelisiniz, böylece bu, cevaplanmış bir soru olarak sunulabilir. [Kendi sorularımı cevaplamalı mıyım?] (Http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions) – Jarekczek

cevap

8

Sen çözümü (eğer hesaplanırken şeyi açıklamak için aşağıda yorumladı) bana doğru görünüyor:

long getAvailableMemory() { 
    Runtime runtime = Runtime.getRuntime(); 
    long totalMemory = runtime.totalMemory(); // current heap allocated to the VM process 
    long freeMemory = runtime.freeMemory(); // out of the current heap, how much is free 
    long maxMemory = runtime.maxMemory(); // Max heap VM can use e.g. Xmx setting 
    long usedMemory = totalMemory - freeMemory; // how much of the current heap the VM is using 
    long availableMemory = maxMemory - usedMemory; // available memory i.e. Maximum heap size minus the current amount used 
    return availableMemory; 
} 

ben Kullanım durumunuz ne olduğundan emin değilim ama isteyebileceğiniz yığın içindeki sınırları da vardır PermGen boyutuna bakmak için: How do I programmatically find out my PermGen space usage?

İlgili konular