我正在處理大量數據,這些數據正從硬盤讀取並放入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上使用多線程? –