做了个小测试,不知道准确否. 几次运行均同一结果. class Ems { private String[] strArr;
public Ems() { strArr = new String[10000]; for (int i = 0; i < strArr.length; i ++) strArr[i] = new String("Hello World! i="+i); } }public class MemTest { public static void main(String[] args) { long start,end; Runtime rt = Runtime.getRuntime(); rt.gc(); // 垃圾回收 start = rt.freeMemory(); System.out.println("start="+start); Ems ems = new Ems(); end = rt.freeMemory(); System.out.println("end ="+end);
几次运行均同一结果.
class Ems
{
private String[] strArr;
public Ems()
{
strArr = new String[10000];
for (int i = 0; i < strArr.length; i ++)
strArr[i] = new String("Hello World! i="+i);
}
}public class MemTest
{
public static void main(String[] args)
{
long start,end;
Runtime rt = Runtime.getRuntime();
rt.gc(); // 垃圾回收
start = rt.freeMemory();
System.out.println("start="+start);
Ems ems = new Ems();
end = rt.freeMemory();
System.out.println("end ="+end);
System.out.println("end - start=" + (start - end));
System.out.println("单个String对象占的内存为:"+((start - end)/10000.0));
}
}F:\>javac MemTest.javaF:\>java MemTest
start=1936472
end =762120
end - start=1174352
单个String对象占的内存为:117.4352F:\>java MemTest
start=1936472
end =762120
end - start=1174352
单个String对象占的内存为:117.4352F:\>
yuzl32(Hello!有酒醉)的例子中JVM只main一个线程.到了复杂的系统里就不准确了.我们是否可以对线程内所有基本数据求和得到内存占用的近似值呢?比如 字符串占内存是 str.length*8;整型占内存32b(这由平台决定)。