如果我在Java中创建一个Hashtable<K, V>
并向其中放入N个元素,它将占用多少内存?如果这取决于实现,那么一个好的“猜测”是什么?
如果我在Java中创建一个Hashtable<K, V>
并向其中放入N个元素,它将占用多少内存?如果这取决于实现,那么一个好的“猜测”是什么?
编辑; 哎呀,我真是傻瓜,我给出的信息是HashMap而不是HashTable。 但是,检查后,它们的实现在内存方面是相同的。
这取决于您的VM的内部内存设置(打包项目,32位或64位指针以及字对齐/大小),并且未由java指定。
有关估计内存使用情况的基本信息可以在此处找到。
您可以这样估算:
因此,将其结合在一起(适用于32/64位Sun HotSpot JVM):HashMap需要24字节(它本身,原始字段)+ 12字节(插槽数组常量)+每个插槽4或8字节 +每个条目24/40字节 +键对象大小+值对象大小+填充每个对象到8字节的倍数
或者,大致上(仅适用于默认设置,不保证精确):
注意:这需要更多的检查,64位虚拟机可能需要12字节的对象开销。我不确定空值——空指针可能以某种方式被压缩。
这很难估计。我建议您首先阅读以下内容:
http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html只需使用sunjdk工具来查找K、V和的大小
jmap -histo [pid]
num #instances #bytes class name
1: 126170 19671768 MyKClass
2: 126170 14392544 MyVClass
3: 1 200000 MyHashtable
如果不需要同步,则可以使用HashMap代替Hashtable。