如何在Java中找到CPU密集型类?

我有一个使用multithreading的Java大程序。 在某些情况下,程序开始使用我的八核系统的三个核心中的100%。 在正常使用中,程序使用1-2%的所有核心。 如何找到超载核心的类?

使用与jdk-1.6.0_10捆绑在一起的jvisualvm等分析器

最好的解决方案是使用分析器 – 这就是它们的构建方式,并且有一个与Java 6捆绑在一起的很好的分析器。

另一个(远非理想的解决方案)是在调试模式下在Eclipse IDE中运行您的程序(如果这是您使用的)。 然后,您可以查看正在运行的线程。 如果他们中的很多人被停职,那么不是他们可能是你的罪魁祸首。 强制它(从工具栏中)中断,你可以看到它在哪里。 你有很多机会找到一个清晰的循环或忙着等待。

使用分析器确定哪些线程正在使用所有CPU周期以及它们正在执行的方法。

如果您使用的是Eclipse,则可以使用TPTP分析工具 。

如果您要使用商业分析器路线,那么我建议使用Dynatrace 。

尝试进行线程转储(请参阅jps,jstack命令),然后查看执行的方法。

如果您使用的是基于UNIX的Java或某些版本的Linux,请使用Java查看DTrace。