我有一個非常大的哈希映射(2百萬條目),它是通過讀取CSV文件的內容創建的。一些信息:減少非常大的HashMap的內存使用量
- HashMap將一個String鍵(它少於20個字符)映射到一個String值(大約50個字符)。
- 該HashMap初始化容量爲300萬,因此負載因子大約爲0.66。
- HashMap只被一個操作使用,一旦該操作完成,我「清除()」它。 (儘管看起來這個清除實際上並沒有清除內存,但對System.gc()的調用是必要的嗎?)。
我的一個想法是將HashMap改爲HashMap並使用String的hashCode作爲鍵,這將最終節省一些內存,但如果兩個字符串具有相同的散列碼,則存在衝突問題。 ..這對於長度小於20個字符的字符串有多大可能?
有沒有人有什麼想法在這裏做什麼? CSV文件本身只有100 MB,但是Java在這個HashMap中最終使用了超過600MB的內存。
謝謝!
如何使用嵌入式數據庫(如HSQLDB或SQLite)。 http://hsqldb.org/ http://www.sqlite.org/ – Marcelo
如果你想要一個唯一值,使用哈希碼總是會導致麻煩。 「可能」不是問題:哈希碼中沒有足夠的位來唯一指定一個20個字符的字符串。 – CPerkins