Java错误:java.lang.OutOfMemoryError:GC超时限制已超出

956

当我执行我的JUnit测试时,会遇到这个错误信息:

java.lang.OutOfMemoryError: GC overhead limit exceeded

我知道什么是OutOfMemoryError,但是GC overhead limit是什么意思?我该如何解决这个问题?


18
听起来很有趣。我希望有人能够发布生成这个的代码。 - Buhb
2
我简单地找到了问题,导致内存使用过多,接近堆的限制。一个简单的解决方案可能是给Java引擎一些更多的堆内存(-Xmx),但这只有在应用程序需要与之前设置的堆限制完全相同的内存才有效。 - Mnementh
16
请注意,有多种“OutOfMemoryError”情况,增加堆大小并不是有效的解决方案:耗尽本地线程和耗尽PermGen(与堆分开)是其中的两个示例。在涉及“OutOfMemoryErrors”时要小心,因为会导致它们的原因非常多样化,不要发表过于笼统的陈述。 - Tim
3
你是如何解决这个问题的? - Thorsten Niehues
2
这个错误在我使用Jdk1.8.0_91时发生并仍在发生。 - Parasu
显示剩余6条评论
23个回答

0
在Netbeans中,设计一个最大堆大小可能会很有帮助。进入运行 => 设置项目配置 => 自定义。在弹出的窗口中的运行选项中,进入VM选项,填写-Xms2048m -Xmx2048m。这可以解决堆大小问题。

0

您需要在Jdeveloper中增加内存大小,请前往setDomainEnv.cmd

set WLS_HOME=%WL_HOME%\server    
set XMS_SUN_64BIT=**256**
set XMS_SUN_32BIT=**256**
set XMX_SUN_64BIT=**3072**
set XMX_SUN_32BIT=**3072**
set XMS_JROCKIT_64BIT=**256**
set XMS_JROCKIT_32BIT=**256**
set XMX_JROCKIT_64BIT=**1024**
set XMX_JROCKIT_32BIT=**1024**

if "%JAVA_VENDOR%"=="Sun" (
    set WLS_MEM_ARGS_64BIT=**-Xms256m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms256m -Xmx512m**
) else (
    set WLS_MEM_ARGS_64BIT=**-Xms512m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms512m -Xmx512m**
)

set MEM_PERM_SIZE_64BIT=-XX:PermSize=**256m**
set MEM_PERM_SIZE_32BIT=-XX:PermSize=**256m**

if "%JAVA_USE_64BIT%"=="true" (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%
) else (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%
)

set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=**1024m**
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=**1024m**

4
这些设置仅适用于您本地的IDE,不适用于生产环境。 - Fengzmg

-6
重新启动我的 MacBook 可以解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接