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

是否可以实时跟踪正在执行的Java语句的数量?,java,profiling,Java,Profiling,我们希望防止java插件中出现无限循环,并限制执行语句的数量。我们已经查看了许多Java评测工具,但没有看到任何明确的方法来跟踪这一点,因为Java类正在运行,而不是在完成后只获取一些统计数据 我应该补充一点,我们知道jProfiler,这不是一个选项,因为我们需要以最小的开销跟踪潜在的数千个独立类,我们需要在代码中完成这项工作,以便在特定的执行类超过预设限制时可以杀死它 谢谢 像Yourkit和JProfiler这样的剖析器帮不了什么忙,事实上什么都帮不了。正如不能限制特定Java类使用的内存

我们希望防止java插件中出现无限循环,并限制执行语句的数量。我们已经查看了许多Java评测工具,但没有看到任何明确的方法来跟踪这一点,因为Java类正在运行,而不是在完成后只获取一些统计数据

我应该补充一点,我们知道jProfiler,这不是一个选项,因为我们需要以最小的开销跟踪潜在的数千个独立类,我们需要在代码中完成这项工作,以便在特定的执行类超过预设限制时可以杀死它


谢谢

像Yourkit和JProfiler这样的剖析器帮不了什么忙,事实上什么都帮不了。正如不能限制特定Java类使用的内存量一样,也不能限制CPU。基本上所有类共享相同的CPU/调度程序和内存空间


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

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

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

不,不适用于任何现有的JVM实现

长话短说 理论上是的,如果您愿意广泛地破解JVM的源代码。如果可能的话,这将是一件激烈的事情

旁注:
Erlang的运行时以其管理轻量级进程的方式满足您的要求。每个线程执行N个语句,然后再关闭它们并运行其他程序。这就是Erlang VM如何在中等硬件上支持10秒的数千个进程。

您可能会发现这很有用-


JVMTI是一个api,帮助工具在运行时评测JVM。您需要编写代码,但这给了您很大的自由,让您可以自由地测量和监视什么。

您的意思一点也不清楚。您是否一次对活动线程的数量设置上限?在任何给定时间活动的线程数?知道
等待时间
不是
墙时间
而是
墙时间+N
,其中
N
是不确定的;因此,您不能在时间片中对执行时间设置硬限制。执行语句是对这样的事情设置硬上限的唯一方法,正如大家所说的,这在当前的JVM实现中是不可能的。@JarrodRoberson,+1。任何东西都可能影响实时执行时间,包括其他线程、操作系统等。Tomasz有一些方法可以通过呼叫速率限制、监控程序等间接限制消耗,。。。