当前位置: 首页 > 面试题库 >

java.lang.OutOfMemoryError:超出了GC开销限制

尤飞尘
2023-03-14
问题内容

我在一个程序中创建了这个错误,该程序创建了几个(数十万)HashMap对象,每个对象都有几个(15-20)文本条目。这些字符串必须全部收集(不分解成较小的数量),然后再提交给数据库。

根据Sun的说法,该错误发生“如果在垃圾回收上花费了太多时间:如果在垃圾回收上花费了总时间的98%以上,而回收不到2%的堆,则将引发OutOfMemoryError。 ”。

显然,可以使用命令行将参数传递给JVM,以用于

  • 通过“ -Xmx1024m”(或更多)增加堆大小,或
  • 通过“ -XX:-UseGCOverheadLimit”完全禁用错误检查。

第一种方法工作正常,第二种方法出现在另一个java.lang.OutOfMemoryError中,这一次是关于堆的。

因此,问题是:对于特定的用例(例如,几个小的HashMap对象),是否有任何编程替代方法?例如,如果我使用HashMap clear()方法,问题就会消失,但是存储在HashMap中的数据也会消失!


问题答案:

本质上,你的内存不足以平稳地运行该过程。想到的选项:

  1. 指定更多的内存就像你提到的,尝试像之间的东西-Xmx512m第一
  2. HashMap如果可能,处理少量对象以一次处理
  3. 如果你有很多重复的字符串,String.intern()请先将其使用,然后再将其放入HashMap
  4. 使用HashMap(int initialCapacity, float loadFactor)构造函数针对你的情况进行调整


 类似资料:
  • 问题内容: 我执行JUnit测试时收到以下错误消息: 我知道是什么OutOfMemoryError,但是GC开销限制是什么意思?我该如何解决? 问题答案: 该消息表示由于某种原因,垃圾收集器占用了过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行时恢复的内存很少(默认为堆的2%)。 这实际上意味着你的程序停止任何进展,并且一直在忙于仅运行垃圾回收。 为了防止你的应用程序浪费CPU

  • 我正在IntelliJ Idea Ultimate Edition 2020.2.2上运行Grails 2.5.0。它可以很好地编译和构建代码,但它会不断抛出“java.lang.OutOfMemoryError:超出GC开销限制”错误(整个错误都是复制并粘贴在最后)。以下是我在研究这个错误的基础上尝试的东西: 1)增加构建进程堆大小(在2G、4G和6G下尝试)https://intellij-s

  • 我有一个Spark作业抛出“java.lang.OutOfMemoryError:GC开销限制超出”。 作业正在尝试处理4.5g的文件。 我尝试了以下spark配置:

  • 问题内容: 我正在尝试建立一个包含2台服务器的Gridgain集群。 使用 GridDataLoader 将.csv文件中的数据(100万至5000万个数据)加载到Gridgain 。 从加载的数据中找到最小值,最大值,平均值等, 当在Eclipse中作为独立应用程序运行时,我得到正确的输出。 但是,在建立集群(eclipse环境中的2个服务器中的2个节点+我的Eclipse环境中的1个节点)的同

  • 问题内容: 我收到 java.lang.OutOfMemoryError: 在Android 1.4上运行gradle时, 超出了GC开销限制 …这是我的依赖: 如何解决? 问题答案: 将此添加到您的android闭包(构建gradle): 这样可以解决您的问题。不过,如果您遇到问题,请参见以下链接 GC开销限制超出错误

  • 我已经阅读了与此错误相关的所有其他问题,并尝试了他们的解决方案,但没有任何帮助。 这是我的身材。格拉德尔 我在Android Studio 2.1.3和Android Studio 2.2.3上试过,我试过卸载jdk,然后重新安装。我已经格式化了窗口并重试,但没有用。 我一直在学习java。lang.OutOfMemoryError:超出GC开销限制错误 我该如何解决这个问题?