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到底会不会被“继承”的问题
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值