计算Java对象占用的内存

本文通过一个简单的Java程序演示了如何测量内存使用情况,并通过创建大量对象观察其对内存的影响。进一步,通过调用垃圾回收机制展示如何释放不再使用的对象所占用的内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天验证了个曾困惑我一段时间的小问题,代码简单不做过多介绍了

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值