java - 分析 Java EE 应用程序 - 要寻找什么以及要进行哪些更改?

标签 java refactoring profiling yourkit

我对分析应用程序以提高性能有点陌生。我选择 YourKit 作为我的分析器。毫无疑问,YourKit 提供了非常有趣的统计数据。我遇到困难的是如何处理这些统计数据。

例如,考虑一个在 JAXB POJO 上运行的方法。该方法循环访问 POJO 以访问深度嵌套在 XML 内的标记/元素。这需要 4 层 for 循环才能到达元素/标签,如下所示:

   List<Bundle> bundles = null;
   List<Item> items = null;
   for(Info info : data) { 
      bundles = info.getBundles();
      for(Bundle bundle : bundles) {
         items = bundle.getItems();
         //.. more loops like this till we get to the required element
       }          
    }

YourKit 告诉我,上面的代码是一个“热点”,每次调用包含此代码的方法时,都会收集 80 个对象作为垃圾。上面的代码只是一个例子,并不是我遇到困难的唯一部分。大多数时候我不知道如何处理分析器提供的信息。我可以做些什么来减少上述代码中临时对象的数量?是否有任何明确的原则来提高应用程序的性能?在分析应用程序时要查找哪些统计数据以及每种统计数据有什么含义?

编辑: 分析应用程序的主要目标是提高吞吐量和响应时间。目前的吞吐量仅为所需吞吐量的10%!

最佳答案

重点关注与您的绩效目标相关的统计数据。您对最短响应时间感兴趣,因此请查看每个方法对响应时间的影响有多大,并重点关注那些贡献较大的方法(对于单线程处理,这只是方法调用期间耗时,对该方法的所有调用的总和)。我不确定 YourKit 定义的热点是什么(查看文档),但它可能是累积运行时间最高的方法,因此热点是值得一看的好东西。相比之下,对象分配对响应时间没有直接影响,并且与您的情况无关(除非您已经确定垃圾收集器贡献了很大一部分 CPU 时间,而通常情况下不会)。

关于java - 分析 Java EE 应用程序 - 要寻找什么以及要进行哪些更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12404617/

相关文章:

java - 安装 JOGL

ruby-on-rails - 你如何说服你的经理你的项目需要大量重构?

javascript - 在编辑 javascript 时使用 emacs 进行重构

c - Ubuntu Box 上的应用程序分析

profiling - Callgrind main() inclusive 成本远小于 100%

java - Java Swing 中带有自定义事件的接口(interface)之后的 .class

java - 在java中随机选择的对象上调用通用方法的更好方法

java - hibernate -懒惰= true

javascript - 如何调试 $ionicView.beforeEnter 和 $ionicView.enter 之间的时间

javascript - 如何重构复杂的 JavaScript 函数?