如何提高javaee应用程序的速度
我的应用程序具有以下结构: Glassfish作为服务器和JavaEE6结构(JSF+EJB+JPA) 我有一个包含此代码的函数如何提高javaee应用程序的速度,java,glassfish,java-7,java-ee-6,Java,Glassfish,Java 7,Java Ee 6,我的应用程序具有以下结构: Glassfish作为服务器和JavaEE6结构(JSF+EJB+JPA) 我有一个包含此代码的函数 public boolean function1(type value) { boolean result = false; if() { ....... } else { ......... } return result ; } public void mainfunction(List<type> Lis
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)))
}
}
公共布尔函数1(类型值)
{
布尔结果=假;
if()
{
.......
}
其他的
{
.........
}
返回结果;
}
public void main函数(列表值)
{
对于(int i=0;i 100000),需要10分钟
我的问题是,如果我的笔记本电脑配置增加了,那么执行时间减少了多少?我的笔记本电脑配置中的哪个参数需要更改,更改了什么?它也依赖于JDK吗
我的笔记本电脑配置:intel core i7-2670QM CPU@2.20 GHz(8个CPU)
Ram 4 gb windows 7 64位
如果没有进一步的细节,很难给出答案。从我所看到的一点来看,我可以建议:
- function1的作用是什么?它是否包含任何依赖于值的循环?如果它的参数是线性的(即,它在大约恒定的时间内运行),那么您可以通过在更快的CPU上迁移来提高性能。如果程序正在消耗内存(缓存等),那么您应该尝试为JVM提供更多内存()
- Listvalues来自何处?它是否包装数据库记录?如果是,数据库在何处?如果它在您的PC上运行,您可能会通过升级CPU和/或为DB服务器提供更多内存(甚至更改max thread参数)来提高性能。如果它在外部服务器上,您在客户端就无能为力(除了检查连接/带宽外)
最后,我能从您的代码中猜到的唯一主要改进是尝试并行(即多线程版本),但是,正如我所说的,没有细节,很难说得更多)。通过这种方式重写代码可能会带来一个小的改进:
for ( Type item: listValues )
item.setParameter ( function1 ( item ) );
这避免了调用List.get()两次(代价稍高),最重要的是,它通过Collection.iterator()对列表进行迭代,如果您有LinkedList,那么它比使用索引要快得多
注意,我还根据Java约定(和英语语法)重命名了变量和类型
编辑:从下面的评论中,我意识到,我应该提到一个一般性的问题,如何评估程序的性能以及如何改进程序?首先,你应该了解常见的算法和数学分支,如图论或运筹学。还有一个计算复杂性理论,w它允许您处理算法分析和优化().在java中循环100000个对象,即使是在速度较慢的处理器上,也不会花费10分钟。您需要做的是确定代码中的哪些内容导致了速度较慢。这不是循环或您发布的if/else语句。正如zakmck所建议的,查看数据库或IO操作将产生最佳结果。内存和执行速度都很快,但是磁盘、io和数据源都很慢。首先感谢您的回答。其次,我没有写更多的细节,因为我的目标不是优化函数,而是理解即使使用优化的代码,在执行时间上也会有所不同。例如,如果我的列表大小变得像100000000,我需要一个m的答案ax 10分钟我能做什么?不可能缩短时间?或者我需要一种其他先进装备,它可以在不到10分钟的时间内执行此功能。请参阅我在回答中添加的内容。除了一般情况外,这实际上取决于您的功能。一般来说,在给定计算机上以给定速度运行的程序可以在更高速度的计算机上运行得更快功能强大的计算机。但是,这并不总是正确的,例如,如果它写得很糟糕,并且包含阻塞条件,或者如果它的扩展性很差(即,它的性能随着列表大小而迅速下降),那么即使在世界上最强大的计算机上,它也会挂起或变慢。