java隐藏的数据成员_月光软件站 - 编程文档 - Java - 你知道数据大小吗?--不要花太多的功夫来隐藏类的成员(一)...

public class Sizeof

{

public static void main (String [] args) throws Exception

{

// Warm up all classes/methods we will use

runGC ();

usedMemory ();

// Array to keep strong references to allocated objects

final int count = 100000;

Object [] objects = new Object [count];

long heap1 = 0;

// Allocate count+1 objects, discard the first one

for (int i = -1; i < count; ++ i)

{

Object object = null;

// Instantiate your data here and assign it to object

object = new Object ();

//object = new Integer (i);

//object = new Long (i);

//object = new String ();

//object = new byte [128][1]

if (i >= 0)

objects [i] = object;

else

{

object = null; // Discard the warm up object

runGC ();

heap1 = usedMemory (); // Take a before heap snapshot

}

}

runGC ();

long heap2 = usedMemory (); // Take an after heap snapshot:

final int size = Math.round (((float)(heap2 - heap1))/count);

System.out.println ("'before' heap: " + heap1 +

", 'after' heap: " + heap2);

System.out.println ("heap delta: " + (heap2 - heap1) +

", {" + objects [0].getClass () + "} size = " + size + " bytes");

for (int i = 0; i < count; ++ i) objects [i] = null;

objects = null;

}

private static void runGC () throws Exception

{

// It helps to call Runtime.gc()

// using several method calls:

for (int r = 0; r < 4; ++ r) _runGC ();

}

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 ();

}

}

private static long usedMemory ()

{

return s_runtime.totalMemory () - s_runtime.freeMemory ();

}

private static final Runtime s_runtime = Runtime.getRuntime ();

} // End of class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值