构造超过10万个键的映射时如何避免内存不足

时间:2018-12-21 00:25:56

标签: java dictionary out-of-memory

我正在用Java中的代码进行工作,在该数据库中我将​​遍历数据库表,并使用一个键(该键是字符串值(项目名称,最多可包含1024个字符))和一个键来构造该表中唯一项目的列表。数字(长)。该表可以包含100K或更多唯一项。代码是这样的:

Map<String, long> getUniqueItems() {  
   Map<Stirng, long> map = new HashMap<>();  
   recordsItr = readDatabaseRecord();  
   while(recordItr.hasNext()) {  
       RecordItem item = recordItr.next();  
       map.put(item.getName(), item.getValue();  
   }  

   return map; 
}

但是,如果唯一记录的数量很大,那么我当然会在应用程序中耗尽内存。在构造此控件时如何避免走出空间或记忆。最后,一旦我获得了地图,我就可以使用它来遍历其条目,并对每个项目进行一些操作。

谢谢

Arsalan

1 个答案:

答案 0 :(得分:0)

正如@ Marco13的评论,100k元素对于存储在主存储器中来说并不是太大。但是,如果recordsItr是一个数组,则编译器将需要连续个内存来存储元素,在这种情况下,如果您的主内存狭窄,则可能会出现内存不足的问题。除了使用数组,您还可以使用不需要连续存储的另一种数据结构,它们是stackqueuelinked list,...它们足以容纳10万个元素(如果不确定,我不确定)。此外,不要忘记优化代码以减少占用过多内存。