2011-06-02 11 views
10

Sto cercando di calcolare la quantità di memoria disponibile per il mio programma Java. Ho questa implementazione attuale:Qual è il modo migliore per calcolare la memoria disponibile in Java?

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; 
} 

È quello giusto? Esiste un modo più semplice/più accurato per calcolare queste informazioni? Dopo aver guardato qualcun altro codice, ho visto qualcosa di simile, che è leggermente diverso:

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; 
} 

In ogni caso, qual è il modo giusto per arrivare a queste informazioni?

+1

La tua soluzione mi sembra corretta. – Adrian

+0

Pensavo fossero uguali ma ora vedo che il 2 ° ti dà (max - totale). – trutheality

+1

Penso che dovresti inserire una parte della tua domanda come risposta, in modo che questo possa essere presentato come una domanda risposta. [Devo rispondere alle mie domande] (http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions) – Jarekczek

risposta

8

soluzione Si è corretto a me (di seguito commentata per spiegare quello che stai calcolo):

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; 
} 

Non sono sicuro di ciò che il vostro caso d'uso è, ma ci sono anche dei limiti all'interno del mucchio che si potrebbe desiderare da guardare come Dimensione PermGen: How do I programmatically find out my PermGen space usage?

Problemi correlati