簡體   English   中英

內存有效的方式來存儲大列表 <Map<String,String> &gt;許多地圖條目相同的地方

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM