我目前正在构建一个Java应用程序,最终可能会在许多不同的平台上运行,但主要是Solaris,Linux和Windows的变种.
有没有人能够成功提取信息,例如当前使用的磁盘空间,CPU利用率和底层操作系统中使用的内存?那么Java应用程序本身正在消耗什么呢?
我更希望在不使用JNI的情况下获取此信息.
有类似的问题,但他们似乎避免回答这个具体的问题.如何通过Java的Runtime api 获取我的Java程序使用的内存?
这里的答案表明我可以这样做:
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
Run Code Online (Sandbox Code Playgroud)
但无论我运行哪个程序,这总是返回相同的数字.例如,下面我有一个程序,无论我在地图中放了多少个数字,内存使用量保持不变.
package memoryTest;
import java.util.HashMap;
import java.util.Map;
public class MemoryTest {
static Map<Integer, NewObject> map = new HashMap<Integer, NewObject>();
public static void main(String[] args){
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
fillMemory(25);
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
}
static int j=0;
public static void fillMemory(int i){
for(int k=0; k< 2000; k++)
map.put(j++, new NewObject());
}
public static class …Run Code Online (Sandbox Code Playgroud)