Java 追踪一个';超出GC开销限制';错误

Java 追踪一个';超出GC开销限制';错误,java,garbage-collection,profiling,Java,Garbage Collection,Profiling,跟踪(即找到“超出GC开销限制”错误的原因)最简单的方法是什么 将-XX:-usegcoveredlimit参数添加到JVM调用中。Java异常告诉我在我的实现中存在一些难以置信的低效现象,我想解决这个问题 “去仔细看看你的代码”。这个项目非常大,所以我需要一些关于在哪里寻找效率低下的线索 我应该使用剖析器吗?如果是,你会建议哪一个 我应该查看GC日志吗?我尝试过这样做,但我对它有一点了解,而且似乎没有明确的代码指针(指出哪些对象正在被GC’ed) 关于这个错误已经问了很多问题,但似乎没有

跟踪(即找到“超出GC开销限制”错误的原因)最简单的方法是什么

<我不认为好的选择:< /P>
  • -XX:-usegcoveredlimit
    参数添加到JVM调用中。Java异常告诉我在我的实现中存在一些难以置信的低效现象,我想解决这个问题
  • “去仔细看看你的代码”。这个项目非常大,所以我需要一些关于在哪里寻找效率低下的线索
我应该使用剖析器吗?如果是,你会建议哪一个

我应该查看GC日志吗?我尝试过这样做,但我对它有一点了解,而且似乎没有明确的代码指针(指出哪些对象正在被GC’ed)


关于这个错误已经问了很多问题,但似乎没有人回答这个特定的问题。

最简单的工具来开始分析你的应用程序

Netbeans带有内置的探查器。
Jconsole也有一些帮助
VisualVm也有一些帮助。

真正棒的商业工具是DyanTrace

现在了解解决问题的方法: 尽管你可以用其他方法来解决这个问题。但以下事情可能会有所帮助。
1) 您看到的症状可能是由于在代码中创建了太多的短期对象。现在,这不是内存泄漏的情况,而是JVM需要清理太多的垃圾。Jvm无法跟上这一点。您需要检查代码,以确定这些对象是在哪里创建的

2) 您可以做的第二件事是在两次GC运行之间定期进行几个堆转储,并在netbeans或您选择的其他工具中比较这些堆转储。在你的应用程序进入这种糟糕的状态之前,你需要这样做。这个比较会告诉你堆中增加了什么,可能会给你一个指针,指示你在哪里查看你的代码


我希望这有助于解决您的问题。:)

获取内存转储并使用进行分析。注意:该产品来自Eclipse,并不意味着您需要使用/拥有Eclipse才能使用该产品。分析器是您最好的希望。从JVM附带的VisualVM开始。我使用了一个名为YourKit的商业分析工具。你尝试过一些建议吗?还没有,当我有时间尝试时,我会让你知道这是否有用。