java内存开销_Java内存开销

我想问一下

java中的Memory Overhead,

我有一个大型ArrayList(61,770项),并尝试计算每个项目所占用的内存量(计算对象及其ArrayList条目),

通过分析应用程序,我得到所有数据加载后,堆需要〜25Mb.

当ArrayList只有2个项时,堆需要〜1Mb,所以大致:

(24 * 1024 * 1024)/ 61,768 = 407字节.

但是,当我计算每个对象的字段时,我得到148个字节(不包括ArrayList,并假设int = 4,float = 4,reference = 4),我很想知道所有这些额外字节在哪里来了从…

我可以猜测,因为我存储在ArrayList中的对象正在实现一个接口,它们存储了额外的值,也许VM为每个实现的方法存储一个4byte的函数指针?

它们实现的接口有20个函数,因此80个字节,总共228个字节,仍然不接近测量的400个字节.

任何帮助,将不胜感激.

哇,谢谢你所有的好答案.

@Bolo:感谢链接,这个类我测量每个对象大约350个字节,所以我至少可以确认大内存使用的来源.

@Yuval答:感谢您的介绍,这是一个宝贵的信息来源.

@Ukko:点注意到.

@Jayan:现在NetBeans Profiler在我尝试转储堆时给我错误,稍后再试.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值