2012-03-28 134 views
3

更快我在Eclipse中运行的Java SE应用程序。我引导JPA在正常的java 6 SE环境中工作。对数据库中不同表格的每个请求不会超过100毫秒。应用程序运行在Eclipse

的问题是,当我导出运行的JAR和我说Java的罐子myapp.jar,每个请求的数据库的花费约9秒。

我不明白为什么应用程序速度更快,当我从日食

+2

你是如何测量它的?你使用哪个虚拟机参数来运行这个过程? – questzen 2012-03-28 07:54:35

+0

同一级别的日志记录? – Adam 2012-03-28 08:01:09

+0

我通过记录以毫秒为单位的计算时间来测量它。我使用Log4j和日志记录级别是相同的=“调试” – 2012-03-28 08:05:31

回答

1

事实上,每次我在做对数据库的请求,我创建的实体管理器:

Persistence.createEntityManagerFactory("mysqldb"); 

为了优化实体管理器创建我使用一个单独的实体工厂这样的:

private static EntityManagerFactory em = Persistence 
     .createEntityManagerFactory("mysqldb"); 

public static EntityManagerFactory getEmf() 
{ 
    return em; 
} 

这种努力改善外食的应用程序的性能,但在当我运行它在Eclipse的性能没有变化。

我真的不知道什么是它的工作更好,当应用程序被从日食推出的原因,但这种方法解决我的问题的时刻。

+0

+1排序你自己的问题和后续在这里 - 很高兴听到你有它的地方 – davidfrancis 2012-03-28 11:35:25

0

运行它,我不知道如何使用Eclipse编译器。对Eclipse使用Ant脚本是:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project default="create_run_jar" name="Create Runnable Jar for Project Server"> 
<!--this file was created by Eclipse Runnable JAR Export Wizard--> 
<!--ANT 1.7 is required          --> 
<target name="create_run_jar"> 
    <jar destfile="myapp.jar" filesetmanifest="mergewithoutmain"> 
     <manifest> 
      <attribute name="Main-Class" value="myapp.main.Main"/> 
      <attribute name="Class-Path" value="."/> 
     </manifest> 
     <fileset dir="dir.../Myapp/build/classes"/> 
     <zipfileset excludes="META-INF/*.SF" src= 
      ..exclude all libraries 
    </jar> 
</target> 
</project> 
0

您可以使用-verbose:对两个版本的类,看看它加载的类的不同的版本是导致经济放缓

+0

当我添加-verbose:在Eclipse的配置类,我得到的类的列表。当我导出jar或运行java -jar myapp.jar -verbose:class时,什么都不显示。 – 2012-03-28 09:13:05

+0

在-jar – davidfrancis 2012-03-28 11:13:15

+0

之前加上-verbose:class对不起。我使用类加载的控制台输出生成了一个文件,我在控制台中使用diff来比较文件。最大的不同在于,Eclipse中的库是从我创建的用户库中加载的,而另一种情况下,这些类是从jar中包含的库中加载的。我真的不认为这可能是问题 – 2012-03-28 11:26:36

相关问题