用户上传了一个包含 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
消耗这么多内存?如何减少内存消耗?