如何从Java程序中检索可用RAM的数量?

时间:2010-06-11 09:54:34

标签: java memory operating-system

可用内存:我的目标指标 Java :我选择的工具。
??? :使用后者获得前者的好方法。

5 个答案:

答案 0 :(得分:1)

这个question有一些你可以找到有用的好信息。

答案 1 :(得分:1)

可能是这样的,使用Java Native Interface(JNI):

    Kernel32 lib = (Kernel32) Native.loadLibrary ("kernel32",Kernel32.class);           
    Kernel32.MEMORYSTATUS mem = new Kernel32.MEMORYSTATUS ();
    lib.GetMem(mem);
    System.out.println ("Available physical memory " + mem.dwAvailPhys);

答案 2 :(得分:0)

如果不诉诸非便携式或本地库,很难做到。

这样的东西
Runtime.getRuntime().freeMemory()

只会返回JVM可用的内存,这可能与系统范围内的可用内存不同。

这个页面提供了一个很好的纲要。

http://blog.codebeach.com/2008/02/determine-available-memory-in-java.html

答案 3 :(得分:0)

通过执行命令free -m然后解释如下,以获取可用RAM

Runtime runtime = Runtime.getRuntime();

BufferedReader br = new BufferedReader(
    new InputStreamReader(runtime.exec("free -m").getInputStream()));

String line;
String memLine = "";
int index = 0;
while ((line = br.readLine()) != null) {
  if (index == 1) {
    memLine = line;
  }
  index++;
}
//                  total        used        free      shared  buff/cache   available
//    Mem:          15933        3153        9683         310        3097       12148
//    Swap:          3814           0        3814

List<String> memInfoList = Arrays.asList(memLine.split("\\s+"));
int totalSystemMemory = Integer.parseInt(memInfoList.get(1));
int totalSystemUsedMemory = Integer.parseInt(memInfoList.get(2));
int totalSystemFreeMemory = Integer.parseInt(memInfoList.get(3));

System.out.println("Total system memory in mb: " + totalSystemMemory);
System.out.println("Total system used memory in mb: " + totalSystemUsedMemory);
System.out.println("Total system free memory in mb: "   + totalSystemFreeMemory);

答案 4 :(得分:-1)

我知道已经购买了JNIWrapper的两个项目并对结果感到满意。两种基于Windows的用法。当我将它嵌入到我们当前的项目中时,我们想知道当用户启动我们的应用程序(WebStart)时有多少免费ram可用,因为有很多性能投诉很难调查(我们怀疑是RAM问题)。 JNIWrapper帮助我们在启动时收集有关免费ram,总数和CPU等的统计数据,因此如果用户组抱怨,我们可以检查我们的统计数据,看看他们是否已经获得了狡猾的机器。拯救生命。