【问题标题】:how to handle out of memory error for Hash set in java如何处理java中哈希集的内存不足错误
【发布时间】:2015-02-20 07:56:01
【问题描述】:

我在我的程序中使用 HashSet,随着集合的增长,我收到错误“线程中的异常”main“java.lang.OutOfMemoryError: Java heap space”。我有 32 位操作系统和 4Gb 内存。 JVM 无法在 eclpse 中分配超过 1500Mb 的 VM 参数。在这种情况下该怎么办?

【问题讨论】:

  • 显示一些代码,它会有所帮助。一个 HashSet 不需要 1.5GB。
  • 请提供一些代码。您使用的初始容量和负载系数是多少?
  • 我正在创建一个以 hashSet 作为值的大型 hashMap,并且 hashMap 和 hashSet 都在增长。我在其中映射了大约 (45000*45000) 个整数
  • 45000*45000 = 202500000 乘以 4 是 8100000000 或 7.5437128543853759765625 Gb,加上对象开销,加上数组开销。它不适合 4Gb 的 RAM。

标签: java memory-management


【解决方案1】:

你需要增加你的堆空间内存来增加你的堆空间,你可以在命令行使用java -Xms -Xmx。默认情况下,值为 32m 和 128m。

【讨论】:

    【解决方案2】:

    JVM 只能分配 1500Mb 的事实是 32 位 JVM 的“特性”。要超越这一点,您需要使用 64 位 JVM,但您还需要 64 位操作系统和硬件。

    但是,您不太可能真的需要这么多内存。

    您使用Sets 和Maps 可能有充分的理由(例如查找、无重复等),但如果您没有这些要求,那么您可以通过以下方式节省内存使用ints 的数组,尽管这显然有其他含义,例如如何查找要存储的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2015-08-26
      • 2012-01-11
      • 2017-06-16
      • 1970-01-01
      相关资源
      最近更新 更多