use*_*841 4 java memory interface arraylist overhead
我想问一下关于Java内存开销,我有一个大的ArrayList(61770项),并试图计算出每个项目(统计对象及其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在我尝试转储堆时给我错误,稍后再试.
| 归档时间: |
|
| 查看次数: |
6410 次 |
| 最近记录: |