Java中如何查看一个对象的大小

转自:http://zsl-oo7.blog.163.com/blog/static/353297032012322114354445/

Java没有C/C++的sizeof,当你想查看一个new出来的对象到底在堆内存里占了多大地方的时候,就不怎么方便。尤其是,今天我想研究一下到底private属性会不会被子类“继承”,也就是说new一个子类的时候,会不会为它分配父类中private变量的空间。所以必须要sizeof一下。

 
网上搜了一个帖子,教怎么在Java中实现类似sizeof方法的,原帖如下:
 
也可以参考这个英文网页:
 
自己操作过程中遇到了点儿小曲折,这里记录一下,按如下步骤操作则不会出问题:
 
1、先去下载SizeOf_0_2_1.zip( http://sourceforge.net/projects/sizeof/files/),解压其中的 SizeOf.jar 到本地任意目录.最好不要带中文或者空格。比如解压到D:\java,将 D:\java\SizeOf.jar 加入到calsspath环境变量。
 
2、写测试代码:
 import net.sourceforge.sizeof.* ; //别忘了.*
 public class TestSize{
 
 public static void main(String args[ ]){  
 SizeOf.skipStaticField(true); //java.sizeOf will not compute static fields
 SizeOf.skipFinalField(true); //java.sizeOf will not compute final fields
 SizeOf.skipFlyweightObject(true); //java.sizeOf will not compute well-known flyweight objects
 Father fa = new Father();
 System.out.println(SizeOf.deepSizeOf(fa)); //this will print the object size in bytes
 }
 }
 
 class Father{
private int v;
 }
 
3、编译:
javac TestSize.java 
 
4、运行(此处需注意,要加入-javaagent参数):
java -javaagent:"D:\java\SizeOf.jar" TestSize
 
输出结果是:
JAVAGENT: call premain instrumentation for class SizeOf
16
 
如果想用更加易读的方式输出大小,可以这样改打印结果那句:
System.out.println("father's size:"+SizeOf.humanReadable(SizeOf.deepSizeOf(fa))); 
 
OK了,准备开始测试private到底会不会被“继承”的问题

猜你喜欢

转载自sagewsg.iteye.com/blog/1796880