3

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

我应该补充一点,我们知道 jProfiler,这不是一个选项,因为我们需要以最小的开销跟踪潜在的数千个单独的类,我们需要在代码中完成这一切,这样我们就可以在某个特定的执行类超过预设限制时终止它.

谢谢!

4

4 回答 4

3

像 Yourkit 和 JProfiler 这样的分析器无济于事 - 实际上没有任何帮助。就像您无法限制特定 Java 类使用的内存量一样,您也无法限制 CPU。基本上所有类共享相同的 CPU/调度器和内存空间。

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

于 2012-06-22T17:34:28.643 回答
1

简答

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

长答案

理论上是的,如果您愿意广泛研究 JVM 的源代码。如果可能的话,这将是一件很激烈的事情。

边注:

Erlang 的运行时在管理其轻量级进程的方式上正是您所要求的。在它们被关闭并运行其他东西之前,它们会在每个线程中执行 N 条语句。这就是 Erlang VM 在中等硬件上支持成千上万个进程的方式。

于 2012-06-22T17:50:49.073 回答
0

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

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

于 2012-06-22T17:42:37.030 回答
-1

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

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

于 2012-06-22T21:54:29.730 回答