我正在用 Java 编写一个简单的跳棋游戏。当我将鼠标悬停在主板上时,我的处理器性能提升至 50%(核心上为 100%)。

我想找出我的代码的哪一部分(假设是我的错)在此期间正在执行。

我尝试过调试,但在这种情况下逐步调试效果不太好。

有没有什么工具可以告诉我问题出在哪里?我目前正在使用 Eclipse。

有帮助吗?

解决方案

这称为“分析”。您的 IDE 可能附带一个:看 Java 中的开源分析器.

其他提示

使用分析器(例如 你的工具包 )

分析?我不知道你用的是什么IDE,但是 Eclipse 有一个不错的分析器 还有一些开源分析器的列表,位于 java源代码.

简而言之, 分析器 会告诉您程序的哪一部分被调用的频率是多少。

我不太了解我的程序,所以我没有太多经验,但我已经尝试过 NetBeans 集成开发环境 当我测试它时。(我通常也使用Eclipse。我还将研究 Eclipse 中的分析功能。)

NetBeans 分析器会告诉您哪个线程执行了多长时间,以及调用了哪些方法多长时间,并且会提供条形图来显示每个方法花费了多少时间。这应该会提示您哪个方法导致了问题。你可以看看 Java 分析器 如果您好奇的话,NetBeans IDE 提供了这些信息。

分析是一种通常用于测量程序的哪些部分占用大量执行时间的技术,进而可用于评估执行优化是否有利于提高程序的性能。

祝你好运!

1)这是你的错:)

2) 如果您使用的是 eclipse 或 netbeans,请尝试使用分析功能——它应该很快告诉您代码在哪里花费了大量时间。

3)如果失败,请在您认为内部循环所在的位置添加控制台输出——您应该能够快速找到它。

是的,有这样的工具:你必须分析代码。你可以尝试 TPTP 在日食中或者尝试 JProfiler. 。这会让您看到正在调用什么以及调用的频率。

使用分析器。有许多。这是一个列表: http://java-source.net/open-source/profilers. 。例如你可以使用 联合工业计划, ,一个java编码的分析器。

三叶草 将给出一个很好的报告,显示每行和分支的命中计数。例如, 这条线 被处决7次。

提供 Eclipse、Maven、Ant 和 IDEA 插件。这是 免费开源, ,或者你可以获得 30 天评估许可证.

如果您使用的是 Sun Java 6,则最新的 JDK 版本附带 JVisualVM 在 bin 目录中。这是一个功能强大的监视和分析工具,使用起来只需很少的努力 - 您甚至不需要使用特殊参数启动程序 - JVisualVM 只需列出所有当前正在运行的 java 进程,您就可以选择要使用的进程。

该工具将告诉您哪些方法正在使用所有处理器时间。

有很多更强大的工具,但首先使用免费的工具。然后,当您了解其他可用功能时,您就会了解它们如何为您提供帮助。

这是典型的“CPU 高”问题。

CPU过高的问题有两种

a) 某个线程使用一个核心 100% CPU(这是您的场景)

b) 当我们执行某些操作时,CPU 使用率“异常高”。在这种情况下,CPU 可能不是 100%,而是异常高。通常,当我们在代码中进行 CPU 密集型操作(例如 XML 解析、序列化反序列化等)时,就会发生这种情况。

情况(a)很容易分析。当您在 30 秒的时间间隔内经历 100% CPU 5-6 线程转储时。查找处于活动状态(处于“可运行”状态)并且位于同一方法内的线程(您可以通过监视线程堆栈来推断)。您很可能会看到“忙等待”(请参阅​​下面的代码示例)

while(true){
  if(status) break;
  // Thread.sleep(60000); // such a statement would have avoided busy wait
}

情况 (b) 还可以使用以相等间隔获取的线程转储来分析。如果幸运的话,您将能够找到问题代码,如果您无法使用线程转储来识别问题代码。您需要求助于分析器。根据我的经验,YourKit 分析器非常好。

我总是首先尝试使用线程转储。分析器只是最后的手段。在 80% 的情况下,我们将能够使用线程转储来识别。

或者对您的一些常见组件使用 JUnit 测试用例和代码覆盖工具。如果有组件调用其他组件,您很快就会看到这些组件被执行了很多次。

我将 Clover 与 JUnit 测试用例一起使用,但对于开源,我听说 EMMA 相当不错。

在单线程代码中,我发现添加了一些如下语句:System.out.println("A:“+ System.currentTimeMillis());与使用分析器一样简单且有效。您很快就可以缩小导致问题的代码部分的范围。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top