gpt4 book ai didi

java - 如何优化大内存的内存使用?

转载 作者:行者123 更新时间:2023-11-30 07:09:48 26 4
gpt4 key购买 nike

我在 java 中有一个很大的 HashMap,用于存储从 String 到 Integer 的映射。它有 400K 条记录。它运行正常,但我想知道是否有更好的内存使用优化。 Map初始化后,只会进行搜索,不会进行其他更新操作。

我依稀记得我遇到了一些将字符串键转换为 int 的建议,但不确定。请帮助或分享您的想法。

谢谢。

最佳答案

I vaguely remember that I came across some suggestions to convert the string keys as int, but not sure about that.

如果字符串键实际上是整数的字符串表示,那么将它们转换为 IntegerLong 对象是有意义的......使用 Integer .valueOf(字符串)。您将节省一些内存,因为原始包装类比相应的 String 对象使用更少的内存。空间节省可能会很显着(每个 key 可能约 16 字节而不是约 40 字节……取决于您的平台。)

这样做的另一面是,在进行 HashMap 查找之前,您需要将候选键从 String 转换为真正的键类型。该转换需要一些时间,并且通常会产生一些垃圾。


但如果 String 键不代表整数,那么这根本行不通。 (或者至少......我不知道你指的是什么“转化”......)

另请注意,键类型必须是 Integer/Long 而不是 int/long。泛型类型参数必须是引用类型。


可能还有第 3 方集合实现也有帮助……具体取决于您的数据结构是否有效;例如宝库、 Guava 、Fastutil。然后尝试将 String -> Integer preconversion 结合起来 ...


关于使用数据库的建议。如果

  • 您不需要数据库的查询/更新/事务功能,并且
  • 您可以负担得起在内存中保存数据的内存,并且
  • 您可以负担将数据加载到内存中的启动成本,

那么使用数据库只是对每次查找造成不必要的性能损失。

关于java - 如何优化大内存的内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com