如何通过Java的Runtime api获取我的Java程序使用的内存?
如何通过Java的Runtime api获取我的Java程序使用的内存?
有类似的问题,但它们似乎回避了回答这个具体的问题。我如何通过Java的Runtime API获取我的Java程序
使用的内存?
这里的答案指出我可以这样做:
System.out.println("KB: " + (double)(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
但无论运行哪个程序,这总是返回相同的数字。例如,在下面的程序中,无论我在地图中放入多少个数字,内存使用量都保持不变。
package memoryTest; import java.util.HashMap; import java.util.Map; public class MemoryTest { static Mapmap = new HashMap (); 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 NewObject{ long i = 0L; long j = 0L; long k = 0L; } }
通过cambecc的main方法,输出如下:
# 3085, 总共: 128516096, 空闲: 127173744, 差异: 671120 # 173579, 总共: 128516096, 空闲: 110033976, 差异: 671128 # 335207, 总共: 128516096, 空闲: 92417792, 差异: 637544 # 672788, 总共: 224198656, 空闲: 159302960, 差异: 1221520 # 1171480, 总共: 224198656, 空闲: 106939136, 差异: 1221544 # 1489771, 总共: 368377856, 空闲: 227374816, 差异: 1212984 # 1998743, 总共: 368377856, 空闲: 182494408, 差异: 1212984