加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hashtable使用多少内存?

发布时间:2020-12-14 05:28:01 所属栏目:Java 来源:网络整理
导读:在 Java中,如果我创建一个Hashtable K,V并将N个元素放在其中,占用多少内存?如果依赖于实现,什么是好的“猜”? 解决方法 编辑;哦,geez,我是个白痴,我给了HashMap的信息,而不是HashTable.然而,在检查之后,为了存储目的,这些实现是相同的. 这取决于您的VM的内
在 Java中,如果我创建一个Hashtable< K,V>并将N个元素放在其中,占用多少内存?如果依赖于实现,什么是好的“猜”?

解决方法

编辑;哦,geez,我是个白痴,我给了HashMap的信息,而不是HashTable.然而,在检查之后,为了存储目的,这些实现是相同的.

这取决于您的VM的内部存储器设置(项目的打包,32位或64位指针和字对齐/大小),并没有被java指定.

估计内存使用的基本信息可以在here中找到.

你可以像这样估计:

>在32位虚拟机上,一个指针是4字节,在64位虚拟机上,它是8字节.
>对象开销是8字节的内存(对于空对象,不含任何内容)
>对象被填充到8字节(ugh)的倍数的大小.
>每个hashmap有一个小的,不断的开销:一个float,3个ints,加上对象开销.
>有一组插槽,其中一些将有条目,其中一些将保留为新的.填充槽与总槽的比例不超过构造函数中的指定负载系数.
>插槽数组需要一个对象开销,加上一个int大小,加上每个插槽的一个指针,以指示存储的对象.
>插槽数通常是存储映射数的1.3到2倍,默认负载因子为0.75,但可能小于此值,这取决于哈希冲突.
>每个存储的映射都需要一个条目对象.这需要一个对象开销,3个指针,加上存储的键和值对象,加上一个整数.

所以,把它放在一起(对于32/64位的Sun HotSpot JVM):
HashMap需要24个字节(本身,原始字段)12个字节(插槽数组常量)每个插槽4个或8个字节每个条目24/40个字节键对象大小值对象大小填充每个对象到8个字节的多个

或大致(至多默认设置,不能保证是准确的):

> 32位JVM:36字节32字节/映射键&值
> 64位JVM:36字节56字节/映射键&值

注意:这需要更多的检查,64位VM上的对象开销可能需要12个字节.我不知道空值 – null的指针可能会被压缩.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读