Java HashMap内存,减少它

Java HashMap内存,减少它,java,memory-management,out-of-memory,Java,Memory Management,Out Of Memory,我在java中使用HashMap,我注意到它会消耗太多内存,但我有必要快速搜索元素 如果我之前知道要在hashMap中放入多少元素,是否有什么方法可以减少hashMap的内存 因为我知道我要存储多少信息,但我不知道 因为我的问题是读取一个文件,在这个文件中有一些信息被分成两组,我必须在同一个结构中连接这些信息 我知道HashMap为了更好地工作会浪费超过25%的内存 感谢您的帮助。使用: new HashMap<>(capacity); 新HashMap(容量); 您是如何注意到它

我在java中使用HashMap,我注意到它会消耗太多内存,但我有必要快速搜索元素

如果我之前知道要在hashMap中放入多少元素,是否有什么方法可以减少hashMap的内存

因为我知道我要存储多少信息,但我不知道

因为我的问题是读取一个文件,在这个文件中有一些信息被分成两组,我必须在同一个结构中连接这些信息

我知道HashMap为了更好地工作会浪费超过25%的内存

感谢您的帮助。

使用:

new HashMap<>(capacity);
新HashMap(容量);

您是如何注意到它占用了太多内存的?这种输出基本上没有意义。除非您已经正确地分析了应用程序,否则没有理由认为(1)存在问题或(2)它与您的映射有丝毫关系。您谈到两组信息被加载到内存中,您使用了“struct”一词(可能是一个Java类)。这些信息消耗内存,并且可能比
HashMap
的内部机制消耗更多内存。你只是在测量
HashMap
和你的数据所使用的内存总量,那么为什么你要假设它都被
HashMap
消耗掉了呢。您不认为您的数据也会消耗内存吗?Java中不可能使用
HashMap
,因为
int
是一种基本类型。您只能有一个
HashMap
。如果您有大量的数字,可以想象将它们装入
java.lang.Integer
对象会消耗太多内存,但将它们放入HashMap本身不太可能成为问题。“…但将它们放入HashMap本身不太可能成为问题。”-每个
HashMap
条目由2个标题词+3个引用+1个
int
组成。这不包括主哈希数组的“共享”或键和值对象占用的空间。事实上,HashMap条目比(比如)一个
整数
更大。这不会使它使用更少的内存,您只需将它预先分配给(大概)更大的容量,这样它就不必在那里自动增长。@Andreas:OP知道将要存储的元素的确切数量,所以没有理由分配比这更多的元素。