2012-03-28 13 views
3

Ich habe eine ausführbare Java-SE-Anwendung in Eclipse. Ich boote JPA, um in einer normalen Java 6 SE-Umgebung zu arbeiten. Jede Anforderung an die verschiedenen Tabellen in der Datenbank dauert nicht länger als 100 ms.Anwendung läuft schneller in der Sonnenfinsternis

Das Problem ist, dass, wenn ich das ausführbare Glas exportieren und ich java -jar myapp.jar sage, dauert jede Anforderung an die Datenbank etwa 9 Sekunden.

Ich verstehe nicht, warum die Anwendung schneller ist, als ich es von Eclipse

+2

Wie haben Sie es gemessen? Mit welchen vm-Argumenten hast du den Prozess ausgeführt? – questzen

+0

Gleiche Protokollebenen? – Adam

+0

Ich vermasse es, indem ich die berechnete Zeit in Millisekunden aufzeichne. Ich benutze Log4j und die Logging-Ebene ist die gleiche = "DEBUG" –

Antwort

1

In der Tat, jedes Mal, wenn ich eine Anfrage an die Datenbank tat, war ich ein Unternehmen Manager erstellen:

Persistence.createEntityManagerFactory("mysqldb"); 

um die Entstehung des Unternehmens-Managers zu optimieren ich eine Singleton Einheit Fabrik wie das verwenden:

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

public static EntityManagerFactory getEmf() 
{ 
    return em; 
} 

dies funktionierte, um die Leistung der Anwendung außerhalb von Eclipse zu verbessern, aber es gibt keine Änderung in der Leistung, wenn ich es in Eclipse ausführen.

Ich bin nicht wirklich sicher, aus welchem ​​Grund es besser funktionierte, wenn die Anwendung von Eclipse gestartet wurde, aber diese Lösung löste mein Problem für den Moment.

+0

+1 für die Sortierung Ihrer eigenen Ausgabe und Follow-up hier - gut zu hören, Sie haben irgendwo damit – davidfrancis

0

Ich betreibe bin nicht sicher, wie Eclipse-Compiler zu verwenden. Der Ant-Skript von Eclipse verwendet wird:

<?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

könnten Sie -verbose: Klasse auf beiden Versionen zu sehen, ob es verschiedene Versionen der Klassen laden, die die Verlangsamung verursachen

+0

wenn ich hinzufügen -verbose: Klasse in der Konfiguration von Eclipse bekomme ich die Liste der Klassen. Wenn ich das jar exportiere oder wenn ich java -jar myapp.jar -verbose: class ausführen, wird nichts angezeigt. –

+0

Setzen Sie die -verbose: Klasse vor dem -jar – davidfrancis

+0

Entschuldigung. Ich erzeugte eine Datei mit der Konsolenausgabe der Klasse, die geladen wurde, und ich verwendete diff in der Konsole, um die Dateien zu vergleichen. Der große Unterschied besteht darin, dass die Bibliotheken im Falle von Eclipse aus den von mir erstellten Benutzerbibliotheken geladen werden, während im anderen Fall die Klassen aus den Bibliotheken geladen werden, die im Jar enthalten sind. Ich glaube wirklich nicht, dass das das Problem sein kann –

Verwandte Themen