【发布时间】:2016-11-20 01:24:19
【问题描述】:
我在 java 中使用 HashMap,我注意到它消耗了太多内存,但我有必要快速搜索元素。
如果我知道要放入多少元素之前,有什么办法可以减少 hashMap 的内存吗?
因为我知道要存储多少信息,但我不知道。
因为我的问题是读取一个文件,在这个文件中有一些信息分为两组,我必须将这些信息连接到同一个结构中。
我知道 HashMap 为了正常工作会浪费超过 25% 的内存。
感谢您的帮助。
【问题讨论】:
-
你怎么注意到它消耗了太多内存?
-
那个输出本质上是没有意义的。除非您正确地分析了您的应用程序,否则没有理由假设 (1) 存在问题或 (2) 它与您的地图有丝毫关系。
-
您谈到要加载到内存中的两组信息,并且您使用了“结构”一词(大概是 Java 类)。 此信息会消耗内存,并且可能比
HashMap的内部机制更多的内存。您只是在测量HashMap和您的数据使用的内存总量,那么您为什么要假设它全部被HashMap消耗。你不觉得你的 data 也消耗内存吗? -
HashMap <int ,int>在 Java 中是不可能的,因为int是一个原始类型。你只能有一个HashMap<Integer,Integer>。如果您有大量数字,可以想象将它们装箱到java.lang.Integer对象中会消耗太多内存,但将它们放在 HashMap 本身不太可能成为问题。 -
"... 但将它们放入 HashMap 本身不太可能成为问题。" - 每个
HashMap条目包含 2 个标题词 + 3 个引用 + 1int。这不包括主哈希数组的“份额”,或者键和值对象占用的空间。事实上,HashMap 条目比(比如说)Integer更大。
标签: java memory-management out-of-memory