我们希望防止 Java 插件中的无限循环,并限制执行的语句数量。我们查看了许多 Java 分析工具,但没有看到任何明确的方法来跟踪它,因为 Java 类正在运行,而不是在它完成后获取一些统计信息。
我应该补充一点,我们知道 jProfiler,这不是一个选项,因为我们需要以最小的开销跟踪潜在的数千个单独的类,我们需要在代码中完成这一切,这样我们就可以在某个特定的执行类超过预设限制时终止它.
谢谢!
像 Yourkit 和 JProfiler 这样的分析器无济于事 - 实际上没有任何帮助。就像您无法限制特定 Java 类使用的内存量一样,您也无法限制 CPU。基本上所有类共享相同的 CPU/调度器和内存空间。
您可以在单独的低优先级线程中运行您的插件类,并等待给定的时间让插件完成。不幸的是,如果它没有完成(例如由于无限循环),您将无能为力。客户端代码必须支持中断线程,不推荐停止线程。
不,没有任何现有的 JVM 实现。
理论上是的,如果您愿意广泛研究 JVM 的源代码。如果可能的话,这将是一件很激烈的事情。
Erlang 的运行时在管理其轻量级进程的方式上正是您所要求的。在它们被关闭并运行其他东西之前,它们会在每个线程中执行 N 条语句。这就是 Erlang VM 在中等硬件上支持成千上万个进程的方式。
您可能会发现这很有帮助 - http://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html。
JVMTI 是一个帮助工具在运行时分析 JVM 的 API。您需要编写代码,但这为您想要测量和监控的内容提供了很大的自由度。