如何以非交互方式评测Java应用程序



我想做的是在Java应用程序执行脚本任务时为其生成一个带有CPU时序信息的调用树。我们的想法是查看代码的每个部分花费了多少时间,以及当我更改代码或任务时,这是如何变化的,但要以一致可重复的方式进行。

在JavaVisualVM中,我可以通过点击开始和停止评测来交互地完成这项工作,但我想自动化这个过程,这样我就可以获得更一致的结果(而不会感到无聊)。VisualVM能做到这一点吗?或者有其他探查器可以做到吗?

如果我是一个探查器供应商,我必须关心为人们提供他们认为想要的东西,即使他们认为想要什么并不能解决他们的问题。

问题是,只有知道例程通常需要多长时间才能发现一些问题,如果你忽略了那些你没有发现的问题,它们将成为你的程序所需时间的主要部分。

我的意思是最近的一个例子:一个程序花50%的时间读取.dll文件,以查找字符串资源来获取文件名,这样字符串就可以显示在启动屏幕上,这样用户就可以在应用程序启动期间看到正在发生的事情。这意味着,如果有其他方式为用户提供养眼剂,该应用程序的启动速度可能会快一倍。在这个过程中,调用堆栈通常有15-20个函数,因此很难仅仅通过函数的时序号来判断发生了什么。

这个问题之所以困难,是因为它是语义。没有一个特定的程序是可以加速的"热门"程序。唯一"热门"的是对程序正在做的事情的总体描述,没有任何工具可以为您隔离它。只有你能认出它。

然而,如果您只是在启动过程中中断程序并检查调用堆栈,那么您看到所花费时间的全部解释的可能性为50%。如果你做了几次,这就是一些程序员所依赖的随机暂停技术的基础,因为它会发现分析器能找到的每一个问题,等等,而其他人则看不起它,因为它不是一个工具。

并以交互方式进行,或者使用类似于pstack的东西提取少量堆栈样本。

最新更新