2011-06-02 48 views
10

我想計算我的Java程序有多少內存可用。 我有這個當前的實施:在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; 
} 

這是正確的嗎?有沒有更容易/更準確的方式來計算這些信息?看着別人的代碼後,我看到了這樣的事情這是稍有不同:

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

總之,有什麼讓這個信息的正確方法?

+1

您的解決方案看起來對我來說是正確的。 – Adrian 2011-06-02 21:56:22

+0

我以爲他們是一樣的,但現在我看到第二個人給你(最大總數)。 – trutheality 2011-06-02 23:47:59

+1

我認爲你應該把你的問題的一部分作爲答案,以便這可以作爲回答問題提交。 [我應該回答我自己的問題](http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions) – Jarekczek 2012-09-17 12:39:16

回答

8

您的解決方案看起來是正確的,我(在下面的評論來解釋你計算的):

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

我不知道你的使用情況是什麼,但也有堆在一定限度內,你可能想看起來像PermGen大小:How do I programmatically find out my PermGen space usage?

相關問題