18

我正在开发一个存在线程问题的 Java 应用程序。

在使用附加了 Netbeans 分析器的应用程序一段时间后,我可以看到创建了几个线程。他们中的大多数完成了一些.5 seconds。我只能找到应用程序中使用的 SwingWorkers。

此外,分析器显示的大多数线程是普通线程,而不是 SwingWorkers。除非这些线程是由 SwingWorker 间接创建的,否则我怀疑应用程序使用的某个库正在创建它们。

现在我想删除这个问题。但是我找不到确定线程创建来源的方法。如果可以,请建议一些其他分析器/工具,通过它们我可以找到线程创建的来源(方法)。

4

2 回答 2

9

如果使用 Eclipse 及其调试器是一个选项,您可以尝试以下操作:

  • 将代码导入 Java 项目。
  • Ctrl-Shift-T(打开类型),输入“线程”。Thread 类的二进制源代码编辑器打开。
  • 在大纲视图中选择所有线程构造函数,使用上下文菜单“切换方法断点”。这会为构造函数创建断点。
  • 运行和调试。

或者

您可以获得Yourkit Java profiler,它也可用于评估。它可以显示在应用程序中创建的线程,包括它们的堆栈跟踪(也在线程完成之后)。它没有显示线程的创建位置,但线程的堆栈跟踪可能会为您提供有关所涉及库的一些线索。

于 2012-05-11T17:58:22.557 回答
9

JProfiler可以做到这一点。线程监视器视图显示创建线程的堆栈跟踪 - 如果当时 CPU 记录处于活动状态:

在此处输入图像描述

免责声明:我公司开发JProfiler

于 2012-05-11T19:39:04.387 回答