我有一个旧的应用程序,一个JAR文件,经过了一些增强。基本上,代码的某些部分必须在修改一些逻辑的同时进行修改。
将旧版本与新版本进行比较,新版本比旧版本慢大约2倍。
我试图缩小导致速度变慢的原因,但我发现自己正在使用System.println和System.currentTimeMillis()来测量某些for循环的时间。这真的变得非常乏味。
有没有Java性能工具可以帮助我找出为什么新的JAR比旧的慢2倍?
提前谢谢。
发布于 2012-03-04 20:58:49
JProfiler具有比较CPU快照的功能。记录新旧JAR文件的执行并保存快照(如果JVM在最后退出,则配置一个保存快照的"JVM exit“触发器)。
然后用"Session->Compare Snapshots in New Window“打开快照比较窗口,添加两个快照。热点比较将如下所示(在本例中设置了视图过滤器):

它将立即向您显示哪些方法导致执行时间的增加。
分析执行时间差异的另一种方法是调用树比较,如下所示:

免责声明:我的公司开发JProfiler。
发布于 2012-03-04 05:55:50
您应该使用分析器。这将向您显示哪些方法占用的时间最长(以及调用它们的是什么),而您不必猜测要测量哪些方法。
Java附带了一个名为hprof的内置分析器,但也请参阅:
发布于 2012-03-04 05:51:36
根据进程运行的时间长短,我会考虑Visual VM 1.3.3。如果你下载了所有的插件,你将能够看到堆、线程、对象等。这应该会有帮助,而且不会花一分钱。
我相信它假定是Oracle/Sun JVM。
https://stackoverflow.com/questions/9550174
复制相似问题