您的位置:首页 > 编程语言 > Java开发

计算Java对象占用的内存

2008-04-21 23:02 405 查看
今天验证了个曾困惑我一段时间的小问题,代码简单不做过多介绍了



public class Test {
private static final Runtime s_runtime = Runtime.getRuntime();

private static long usedMemory() {
return s_runtime.totalMemory() - s_runtime.freeMemory();
}

private static void runGC() throws Exception {
long usedMem1 = usedMemory(), usedMem2 = Long.MAX_VALUE;
for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++i) {
s_runtime.runFinalization();
s_runtime.gc();
Thread.currentThread().yield();
usedMem2 = usedMem1;
usedMem1 = usedMemory();
}
}

public static void main(String[] args) throws Exception {
System.out.println(Test.usedMemory());
for (int i = 0; i < 1000; i++) {
A a = new A();
//B b = new B();
}
System.out.println(Test.usedMemory());
Test.runGC();
System.out.println(Test.usedMemory());
}
}

class A {
private String a;
private String b;
private String c;
private String d;
private String e;
private String f;
private String g;
private String h;
private String i;
private String j;
}

class B {
private String a;
private String b;
private String c;
private String d;
private String e;
private String f;
private String g;
private String h;
private String i;
private String j;

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}

public String getC() {
return c;
}

public void setC(String c) {
this.c = c;
}

public String getD() {
return d;
}

public void setD(String d) {
this.d = d;
}

public String getE() {
return e;
}

public void setE(String e) {
this.e = e;
}

public String getF() {
return f;
}

public void setF(String f) {
this.f = f;
}

public String getG() {
return g;
}

public void setG(String g) {
this.g = g;
}

public String getH() {
return h;
}

public void setH(String h) {
this.h = h;
}

public String getI() {
return i;
}

public void setI(String i) {
this.i = i;
}

public String getJ() {
return j;
}

public void setJ(String j) {
this.j = j;
}
}

执行了n次结果如下

a结果
201640
245512
136040或136200

b结果
201640
247192
136200
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: