如何提高Java EE应用程序的速度

时间:2015-08-28 15:32:01

标签: java glassfish java-7 java-ee-6

我的应用程序具有以下结构:

  

Glassfish作为服务器和Java EE 6结构(JSF + EJB + JPA)。

我有一个包含此代码的函数

public boolean function1(type value)
{
 boolean result = false;

  if()
  {
   .......
  }
  else
  {
   .........
  }
  return result ;
}

public void mainfunction(List<type> Listvalues)
{
 for(int i=0;i<Listvalues.size;i++)
 {
  Listvalues.get(i).setparametre(function1(Listvalues.g(i)))
 }
}

当我使用大小为&gt;的列表执行main函数时100000需要10分钟。

我的问题是,如果我的笔记本电脑配置增加,执行时间减少了多少?以及我的笔记本电脑配置中的哪个参数需要更改?它也依赖于JDK吗?

  

我的笔记本电脑配置:intel core i7-2670QM CPU @ 2.20 GHz(8个CPU)   Ram 4 gb windows 7 64bit

2 个答案:

答案 0 :(得分:0)

如果没有进一步的细节,很难给出答案。从我看到的一点点,我可以建议:

  • function1做什么?它是否包含任何依赖于值的循环?如果它的参数是线性的(即,它在大致恒定的时间内运行),那么您可以通过在更快的CPU上迁移来提高性能。如果程序正在消耗内存(缓存等),那么你应该尝试给JVM更多的内存(http://tinyurl.com/8ccrzwo
  • Listvalues来自哪里?它是否包装数据库记录?如果是,数据库在哪里?如果它在您的PC上运行,您可能会通过升级CPU和/或为DB服务器提供更多内存(甚至更改最大线程参数)来提高性能。如果它在外部服务器上,那么您在客户端可以做的事情不多(除了检查连接/带宽)

最后,我可以从你的代码中猜到的唯一重大改进是尝试并行(即多线程版本),但是,正如我所说,很难说更多,没有细节)。通过这种方式重写代码可能会带来一些小改进:

for ( Type item: listValues )
  item.setParameter ( function1 ( item ) );

这可以避免两次调用List.get()(这有点贵),最重要的是,它通过Collection.iterator()遍历列表,如果你有一个LinkedList,它比使用索引快得多

请注意,我还根据Java约定(和英语语法)重命名了变量和类型。

编辑:从下面的评论中我知道,我应该提到一般性问题,如何评估程序的性能以及如何改进?首先,您应该掌握常用算法和数学分支的知识,例如图论或运筹学。还有一个计算复杂性理论,它允许您处理算法分析和优化(http://tinyurl.com/q52zxs2)。

答案 1 :(得分:0)

即使在慢速处理器上循环遍历100,000个对象也不需要10分钟。您需要做的是确定代码中的内容导致缓慢。它不是您发布的循环或if / else语句。正如zakmck建议的那样,查看数据库或IO操作将产生最佳结果。内存和执行速度很快,但磁盘,io和数据源都很慢。