首页 > Java > 错误 java.lang.OutOfMemoryError: 超出 GC 开销限制

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

上一篇 下一篇

我在执行测试时收到此错误消息:JUnit

java.lang.OutOfMemoryError: GC overhead limit exceeded

我知道什么是 ,但 GC 开销限制是什么意思?我该如何解决这个问题?OutOfMemoryError

分割线

网友回答:

引用Oracle的文章“Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning”

GC 时间过长和内存不足错误

如果在垃圾回收中花费的时间过多,并行收集器将引发 OutOfMemoryError:如果超过 98% 的总时间用于垃圾回收,并且恢复的堆少于 2%,则会引发 OutOfMemoryError。此功能旨在防止应用程序长时间运行,同时由于堆太小而几乎没有进展。如有必要,可以通过将选项添加到命令行来禁用此功能。-XX:-UseGCOverheadLimit

编辑:看起来有人可以打字比我?快

分割线

网友回答:

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

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

为了防止您的应用程序在不完成任何操作的情况下占用 CPU 时间,JVM 会抛出此问题,以便您有机会诊断问题。Error

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

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

  • Java 11 调优指南有专门的章节介绍了针对不同垃圾收集器的过多 GC:
    • 用于并行收集器
    • 对于并发标记扫描 (CMS) 收集器
    • 没有提到垃圾优先 (G1) 收集器的此特定错误条件。
  • Java 8 调优指南及其过多的 GC 部分
  • Java 6 调优指南及其过多的 GC 部分。

分割线

网友回答:

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

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

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

模板简介:该模板名称为【错误 java.lang.OutOfMemoryError: 超出 GC 开销限制】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 301次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-16
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 html5 微信图片 企业网站 微信公众平台 微信素材 单页式简历模板 微信文章 微信模板 自适应
您可能会喜欢的其他模板