【发布时间】:2017-06-16 07:16:11
【问题描述】:
有没有办法监控Java ForkJoinPool 在一段时间内所做的事情,尤其是CountedCompleter 的执行效率如何?
- 子任务执行需要多长时间?
- 其中一项子任务是否比其他子任务长?
- 它们是否并行执行?
应用于 CountedCompleter javadoc 中的触发器示例,监控工具会告诉我 PacketSender 的完成受 HeaderBuilder 的限制,它先开始但需要 13 秒,而 BodyBuilder 需要 4 秒并在之前完成。
我正在寻找这样的工具,主要是作为 Java 代理,以免不必要的统计数据污染我的生产代码,但一无所获。
感谢您的帮助
【问题讨论】:
-
据我所知,这是个好问题,他们不得不在内部使用一些东西来测试这个......
-
你好@Eugene,是的,这也是我的想法。让我们看看
-
Aleksey Shipilëv (shipilev.net) 对 Java7 的 FJP 进行了基准测试。我记得结果很糟糕。我没有看到 Java8 的基准测试。为了监控 FJ 类,您需要从 zip 文件中提取源代码并添加您自己的代码以跟踪事物。 FJ 班的很多工作只专注于工作,而不是提供统计数据。
-
您好@edharned,我不知道该基准(发布链接?),但这并不是真正的问题。为了避免从源代码中提取类,我计划在 JDK 中原生使用检测 API,以添加一些统计信息。这样,代码仍然专注于工作:)
-
好的。您可以使用 visualVM 查看大量使用的类。除此之外,您始终可以构建自己的。但是,这是一个很大的问题,但是,我不知道您将如何仅通过仪器来回答这三个问题。
标签: java concurrency java.util.concurrent