![](/img/trans.png)
[英]How should I map string keys to values in Java in a memory-efficient way?
[英]Memory-efficient way to store large List<Map<String,String>> where many map entries are identical
我正在尋找一種內存有效的方式來存儲通常由大約150000行x 200列組成的表格數據。 單元格值是字符串,長度在0-200個字符之間。
數據行最初是通過采用較小表中所有可能的行組合來生成的。 因此,盡管所有行都是唯一的,但列包含許多具有相同值的副本。 數據不是只讀的。 某些列(通常最多200個列中的20個列)的更新值取決於其他列的值。 帶有計算值的新列(我也希望大約20列)將被添加到表中。
現有的遺留代碼在很大程度上取決於存儲在Map<String, String>
的List
中的數據,該List
將列名映射到單元格值。 但是當前的實現ArrayList<HashMap<String,String>>
占用了許多GB的內存。
我嘗試對插入HashMap
的鍵和值調用String.intern()
。 這使內存占用量減少了一半。 但是,保持所有這些相同的Map.Entry
仍然顯得效率極低。
所以我在想:您能否建議一種內存效率更高的數據結構,以某種方式共享相同的列值,但是這將允許我將外部List<Map<String, String>>
接口保持不變?
我們已經在類路徑上添加了番石榴,因此可以使用番石榴中的集合。
我發現GS集合更適合內存效率高的Map / Set。 通過在幕后使用一些巧妙的技巧和數組,它們避免了存儲地圖條目對象的大量開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.