Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以非交互方式评测Java应用程序?_Java_Profiling - Fatal编程技术网

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

如何以非交互方式评测Java应用程序?,java,profiling,Java,Profiling,我想做的是在Java应用程序执行脚本任务时,为它生成一个调用树,其中包含CPU计时信息。这样做的目的是查看代码的每个部分花费了多少时间,以及当我更改代码或任务时,这些时间是如何变化的,但是要以一种一致的可重复的方式进行 在JavaVisualVM中,我可以通过单击启动和停止评测以交互方式完成此操作,但我希望自动化此过程,以便获得更一致的结果,而不会感到无聊。VisualVM能做到这一点吗,或者有没有其他探查器能做到这一点?如果我是一个探查器供应商,我就必须关心向人们提供他们认为他们想要的东西,即

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


在JavaVisualVM中,我可以通过单击启动和停止评测以交互方式完成此操作,但我希望自动化此过程,以便获得更一致的结果,而不会感到无聊。VisualVM能做到这一点吗,或者有没有其他探查器能做到这一点?

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

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

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

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

但是,如果您只是在启动过程中中断了程序并检查了调用堆栈,则有50%的概率您会看到所花费时间的完整解释。 若您多次这样做,它就是一些程序员所依赖的基础,因为它会发现分析器能找到的每一个问题,还有更多的问题,而其他人则会看不起它,因为它不是一个工具


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

如果我是一个分析器供应商,我必须关心向人们提供他们认为他们想要的,即使他们认为他们想要的并不能解决他们的问题

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

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

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

但是,如果您只是在启动过程中中断了程序并检查了调用堆栈,则有50%的概率您会看到所花费时间的完整解释。 若您多次这样做,它就是一些程序员所依赖的基础,因为它会发现分析器能找到的每一个问题,还有更多的问题,而其他人则会看不起它,因为它不是一个工具


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

YourKit允许您在特定代码行启动和停止评测。@PeterLawrey:NetBeans评测器也允许这样做。但我猜Ben不想在IDE或ProfilerTanks中运行应用程序。我会调查你的工具包和上网本。我通常使用Eclipse作为IDE。我不太在乎如何运行应用程序,只要每次都能让它执行相同的步骤。YourKit允许您在特定的代码行启动和停止评测。@PeterLawrey:NetBeans评测器也允许这样做。但我猜Ben不想在IDE或ProfilerTanks中运行应用程序。我会调查你的工具包和上网本。我通常使用Eclipse作为IDE。我不太在乎如何运行应用程序,只要每次都能让它执行相同的步骤
可以使用采样,我认为这实际上与随机暂停相同,但会自动重复多次。但是,无论是通过检测类进行采样还是分析,我都希望在更改代码时能够快速看到结果中的差异,而不是重复繁琐的手动过程。这有意义吗?@Ben:不同之处不在于取样,而在于总结。分析远比计时的精确性有用。为了看到变化的效果,简单的时间安排就足够了。为了找出要修复的内容,与暂停相比,探查器工作得不是很好。与暂停不同,使用它们的实际加速效果很难在网上找到。至于冗长,我可以向您展示一些链接,比如.javavisualvm可以使用采样,实际上我认为这与随机暂停相同,但会自动重复多次。但是,无论是通过检测类进行采样还是分析,我都希望在更改代码时能够快速看到结果中的差异,而不是重复繁琐的手动过程。这有意义吗?@Ben:不同之处不在于取样,而在于总结。分析远比计时的精确性有用。为了看到变化的效果,简单的时间安排就足够了。为了找出要修复的内容,与暂停相比,探查器工作得不是很好。与暂停不同,使用它们的实际加速效果很难在网上找到。至于无聊,我可以给你看一些像这样的链接。