在Java中计算可用内存的最佳方法是什么?

10

我想计算我的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
我以为它们是一样的,但现在我看到第二个只是给你(最大值 - 总和)。 - trutheality
1
我认为你应该将问题的一部分作为答案,这样就可以把它归档为已回答的问题了。我应该回答自己的问题吗? - Jarekczek
1个回答

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大小: 如何编程找出我的PermGen空间使用情况?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接