2011-06-02 54 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?

相关问题