簡體   English   中英

LinkedHashMap內存消耗

[英]LinkedHashMap memory consumption

用戶上傳一個包含100萬字的大文件。 我解析文件並將文件的每一行放入LinkedHashMap<Integer, String>

我需要通過密鑰進行O(1)訪問和刪除。 此外,我需要保留訪問順序,從任何位置迭代和排序。

內存消耗巨大。 我啟用了Java 8中出現的String重復數據刪除功能 ,但事實證明LinkedHashMap占用了大部分內存。

我發現LinkedHashMap.Entry 消耗40個字節 ,但只有2個指針 - 一個用於下一個條目,一個用於上一個條目。 我認為1指針應該是64位或32位。 如果我將409,405,320(字節)除以6,823,422(條目數),我買入每個條目60個字節。

我想我不需要前面的指針,下一個指針應該足以保持順序。 為什么LinkedHashMap消耗這么多內存? 如何減少內存消耗?

實例發生

如何減少內存消耗?

1)在JVM啟動時添加-XX:+UseCompressedOops標志。

2)實現您自己的LinkedHashMap版本,根據您的需求進行優化。 I. e。 使用原始int作為鍵而不是Integer ,如果不需要則刪除“previous”指針等。請注意,除非您希望在GPLv2許可下發布修改后的哈希映射實現,否則復制OpenJDK源可能是不可能的,因為OpenJDK是GPLv2許可。 但是,您可以從Android開源項目復制和修改LinkedHashMap實現,因為它是Apache許可的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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