我想问一下
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在我尝试转储堆时给我错误,稍后再试.