btrace sizeOf 与 jmap -histo中对象大小说明

 

        众所周知,btrace中可以使用 com.sun.btrace.BTraceUtils.sizeof(Object)来计算传入的对象的大小;jmap -histo中也可以显示heap中对象大小信息,到底这两个显示的object size是“浅大小” 还是 “深大小”?

 

        简单测试一下:

BTraceUtils.sizeof(Object):

        首先来看btrace,被测试代码如下:

 

btrace脚本如下:

原理很简单,通过拦截TestBtrace#work(Object) 计算传入的TestBtrace对象的大小。

测试脚本如下: 

 

执行脚本,运行结果如下: 

 

OK,object大小才24 byte,而TestBtrace#data就是好几MB,所以证明com.sun.btrace.BTraceUtils.sizeof(Object)算出的是对象的浅大小。

如果有兴趣,可以修改TestBtrace 中的data的大小,再多试几次。

 

jmap -histo:

还是上面的TestBtrace.java ,稍微修改一下运行脚本,如下:

 

运行结果如下: 

 

由于TestBtrace 对象是不停在创建的,所以#instances 可能会有不同,但是可以肯定的是,jmap -histo 打印的也是对象的浅大小,和btrace一样。

 

结论:

无论是BTraceUtils.sizeof(Object) 还是 jmap -histo,显示的都是对象的浅大小,因此,在使用jmap -histo 排查内存泄漏的问题时,除了[B等基础类型外([B等基础类型已经是其真实大小),不能单纯的通过#bytes 列判断内存占用,还是要综合考虑才行。

 

好,祝大家玩儿的愉快!

 

-- EOF --

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值