2012-03-28 139 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

相關問題