是否可以实时跟踪正在执行的Java语句的数量?

时间:2012-06-22 17:18:52

标签: java profiling

我们想要防止java插件中的无限循环,并限制执行的语句数量。我们已经查看了许多Java分析工具,并且没有看到任何明确的方法来跟踪Java类正在运行,而不是在完成后获取一些统计信息。

我应该补充一点,我们知道jProfiler,这不是一个选项,因为我们需要以最小的开销跟踪潜在的数千个单独的类,我们需要在代码中完成所有这些,所以我们可以杀死一个特定的执行类,如果它超出预设限制。

谢谢!

4 个答案:

答案 0 :(得分:3)

像Yourkit和JProfiler这样的配置文件将无济于事 - 实际上什么都不会。就像您不能限制特定Java类使用的内存量一样,您不能限制CPU。基本上所有类共享相同的CPU /调度程序和内存空间。

您可以在一个单独的低优先级线程中运行您的插件类,并等待一段时间让插件完成。不幸的是,如果它没有完成(例如由于无限循环),你无能为力。中断线程必须遵守客户端代码,并且不推荐停止它。

答案 1 :(得分:1)

简答

不,不是任何现有的JVM实现。

长答案

理论上是的,如果你愿意广泛攻击JVM的源代码。如果可能的话,这将是一件非常重要的事情。

旁注:

Erlang的运行时通常以其管理轻量级进程的方式提供所需的功能。在关闭之前,每个线程执行N个语句,然后运行其他语句。这就是Erlang VM如何在中等硬件上支持数以万计的进程。

答案 2 :(得分:0)

WCET分析工具很少,但他们假设代码是专门注释的。例如,请参阅Volta tools

如果需要在运行时检测此类问题,唯一的方法是将插件执行包装到单独的线程中并处理执行时间。这是一个example

答案 3 :(得分:-1)

您可能会发现这有用 - http://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html

JVMTI是一个api,可以帮助工具在运行时分析JVM。您需要编写代码,但这为您要测量和监控的内容提供了很大的自由。