当前位置: 首页 > 知识库问答 >
问题:

java错误。lang.OutOfMemoryError:超出GC开销限制

温嘉玉
2023-03-14

当我执行我的JUnit测试时,我得到了这个错误消息:

java.lang.OutOfMemoryError: GC overhead limit exceeded

我知道什么是OutOfMemoryError,但GC开销限制意味着什么?我怎样才能解决这个问题?

共有3个答案

訾俊名
2023-03-14

如果您确定您的程序中没有内存泄漏,请尝试:

  1. 增加堆大小,例如-Xmx1g.
  2. 启用并发低暂停收集器-XX: UseConcMarkSweepGC.
  3. 尽可能重用现有对象以节省内存。

如有必要,可以通过在命令行中添加选项-XX:-usegcoveredlimit来禁用限制检查。

钱渊
2023-03-14

引用Oracle文章《JavaSE 6 HotSpot[tm]虚拟机垃圾收集调优》:

GC时间过长与OutOfMemoryError

如果在垃圾收集中花费的时间太多,并行收集器将抛出OutOfMemoryError:如果在垃圾收集中花费的时间超过总时间的98%,而堆的恢复时间少于2%,则将抛出OutOfMemoryError。此功能旨在防止应用程序在运行较长时间的同时由于堆太小而进展甚微或毫无进展。如有必要,可通过在命令行中添加选项-XX:-usegcoveredlimit来禁用此功能。

编辑:看起来有人打字比我快:)

温浩大
2023-03-14

此消息意味着由于某种原因,垃圾回收器占用了过多的时间(默认情况下占进程所有CPU时间的98%),并且在每次运行中恢复的内存很少(默认情况下占堆的2%)。

这实际上意味着您的程序停止执行任何进度,并且始终只忙于运行垃圾收集。

为了防止应用程序在没有完成任何工作的情况下占用CPU时间,JVM抛出这个错误,以便您有机会诊断问题。

我见过这种情况的罕见案例是,一些代码在已经非常内存受限的环境中创建了大量临时对象和大量弱引用对象。

查看JavaGC调优指南,该指南适用于各种Java版本,并包含有关此特定问题的部分:

  • Java 11 tuning guide(Java 11调优指南)有专门的章节介绍不同垃圾收集器的过量GC:
 类似资料:
  • 我试图用火花处理10GB的数据,它给了我这个错误, Java语言lang.OutOfMemoryError:超出GC开销限制 笔记本电脑配置为:4CPU,8个逻辑内核,8GB RAM 提交Spark作业时进行Spark配置。 在网上搜索了这个错误后,我有几个问题 如果回答,那将是一个很大的帮助。 1) Spark是内存计算引擎,用于处理10 gb的数据,系统应具有10 gb的RAM。Spark将1

  • 当我运行我的8-puzzle程序时,我不断得到“超出GC开销限制”。我曾尝试向JVM添加更多内存,但没有任何帮助。 这是问题所在的方法: start是我从文件. txt中读取的字符串。它可以解决一些问题,但有些问题会产生此错误。

  • 当我尝试运行TestRun时,我遇到了以下错误。我试了很多,但找不到。帮帮我!我得到了内存不足错误Java堆。运行以下代码也需要更多的时间来运行,最后它显示错误,如下所示。如何使这段代码正确?调试这对我来说非常困难。线程“主”中的异常java.lang.OutOfMemoryError:Java堆空间。 班级总和: 类测试运行:

  • 我使用Spark\u apply在Spark中遇到GC开销限制超出错误。以下是我的规格: SparkyR v0.6.2 Spark v2.1.0 4个工人,8核和29G内存 闭包每次从Cassandra提取一行数据。总共大约有20万行。这个过程运行了大约一个半小时,然后给了我这个内存错误。 我试过spark。驾驶员内存本应增加堆大小,但它不起作用。 有什么想法吗?下面的用法

  • 这是我的java代码,我在其中使用Apache Spark sql从Hive查询数据。 当我运行此代码时,它抛出java.lang.OutOfMemoryError:超出GC开销限制。如何解决此问题或如何在Spark配置中增加内存。

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