【问题标题】:Java Hashmap. How many maximum records should it be used for?Java哈希图。它应该用于多少条记录?
【发布时间】:2013-07-24 02:37:32
【问题描述】:

我有 10,000 个映射。将它们全部放在 java Hashmap 中并进行访问是个好主意吗?这将保存数据库事务,因为所有 10,000 条记录都将存在于内存中。每个映射将有大约 100 个字符,包括键和值,并且映射将非常不同。问这个问题,因为在 Java 或类似情况下没有丰富的经验。

【问题讨论】:

  • HashMaps 不在乎你在里面放了什么;添加新数据时它们会自动扩展。不过,您的 RAM 确实如此,但如今即使是最小的内存,对于最低端的上网本式计算机来说也只有 1 GB 左右。

标签: java memory-management jvm hashmap


【解决方案1】:

就内存而言,10K 个对象只是杯水车薪(请原谅双关语)。

试试看,但我想你会发现即使是现在最普通的内存容量也能应付。确保你有一个合理的堆大小:-Xmx512m 或其他

【讨论】:

    【解决方案2】:

    应该不是问题。需要注意的事项:

    1. 创建具有预期容量的 HashMap 实例,以避免在添加 10K 项时调整地图大小。
    2. 确保您的密钥具有良好的hashcode 和匹配的equals 实现。如果您使用字符串之类的东西作为密钥,这已经为您完成了。

    【讨论】:

    • 感谢您的意见。因此,如果将来要添加到我的 Hashmap 的记录数增加到超过它实例化的容量,它实际上会被调整大小,并且 Hashmap 仍将继续以应有的方式工作。正确吗?
    • 是的,地图继续工作。您会看到恒定时间put 操作,直到您达到容量并且地图决定调整大小。发生这种情况时,它会分配一个新的(更大的)存储并将每个现有项目插入到新存储中。它分配了额外的空间,因此您的puts 会再次快速恢复,直到它需要再次增长。让它增长通常不是问题,但如果你提前知道要插入一些项目,你不妨一开始就分配那么大。
    【解决方案3】:

    HashMap.size()的返回类型是整数。

    int HashMap.size()(返回此映射中键值映射的数量。)

    因此您最多可以存储 2,147,483,647 个对象。

    int -> int 数据类型是一个 32 位有符号二进制补码整数。它的最小值为 -2,147,483,648,最大值为 2,147,483,647(含)。

    要将最大值存储到地图中,您需要增加堆大小(取决于您的需要)。

    【讨论】:

      【解决方案4】:

      要映射的元素有多大?

      这取决于您想要的元素大小和 JVM 上的可用大小,但在大多数情况下,拥有 10,000 个映射是可行的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-12
        • 2010-09-18
        相关资源
        最近更新 更多