我正在处理大量数据,这些数据正从硬盘读取并放入HashMap
。读取过程已使用Externalized
而不是Serializable
进行了优化,因此实际数据量不是问题。实现HashMap插入的高吞吐量
这个过程中的瓶颈是HashMap<Long, Entity>
,这个过程中填写了这个瓶颈。我的代码看起来如下:
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
int nbEntries = in.readInt();
entities = new HashMap<>(nbEntries);
for(int i = 0; i < nbEntries; i++) {
Entity entity = new Entity(0);
relation.readExternal(in);
//entities.put(entity.getId(), entity); //<-- Bottleneck!
}
}
正如比较:数据的读出的4Gb需要秒包括插入HashMap
和秒无插入。
是否有快速的方法将大量数据插入HashMap
?数据不一定要保持HashMap
。该地图可能是不可变的,但访问性能至关重要。
如何划分输入数据并在ConcurrentHashMap上使用多线程? –