Eclipseで実行可能なJava SEアプリケーションがあります。通常のJava 6 SE環境で動作するようにJPAをブートストラップします。データベース内の異なるテーブルに対する各要求は100ms以上かかることはありません。アプリケーションはより速く実行されます。
問題は、実行可能なjarをエクスポートして、java -jar myapp.jarと言うとき、データベースへの各要求に約9秒かかります。私は日食
Eclipseで実行可能なJava SEアプリケーションがあります。通常のJava 6 SE環境で動作するようにJPAをブートストラップします。データベース内の異なるテーブルに対する各要求は100ms以上かかることはありません。アプリケーションはより速く実行されます。
問題は、実行可能なjarをエクスポートして、java -jar myapp.jarと言うとき、データベースへの各要求に約9秒かかります。私は日食
を引き起こしているクラスの異なるバージョンをロードしていますかどうかを確認するために、その都度I私は、エンティティマネージャを作成して、データベースへの要求をしていた。
Persistence.createEntityManagerFactory("mysqldb");
私はそのようなシングルトンエンティティファクトリを使用して、エンティティ・マネージャの作成を最適化するために:
private static EntityManagerFactory em = Persistence
.createEntityManagerFactory("mysqldb");
public static EntityManagerFactory getEmf()
{
return em;
}
これはEclipse以外のアプリケーションのパフォーマンスを改善するために働いていましたが、Eclipseで実行するとパフォーマンスに変化はありません。
アプリケーションがEclipseから起動されたときに、それがよりうまくいった理由はわかりませんが、この解決策は私の問題を現時点で解決しました。
+1あなた自身の問題を並べ替えるためにここにフォローアップ - あなたがそれをどこかに持って聞いて – davidfrancis
から、それを実行したときに
は、私は日食のコンパイラを使用する方法のわからないアプリケーションが高速である理由を理解していません。日食が使用するAntスクリプトは次のとおりです。
あなたは-verbose使用することができ<?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>
:両方のバージョンでクラスを、それが実際には景気減速
-verboseを追加すると:Eclipseの設定でクラスを取得します。 jarをエクスポートするとき、またはjava -jarを実行するときmyapp.jar -verbose:class nothingが表示されます。 –
-verbose:classを-jarの前に入れてください。 – davidfrancis
申し訳ありません。私は、クラスの読み込みのコンソール出力ファイルを生成し、私はdiffを使用して、ファイルを比較しました。大きな違いは、Eclipseの場合のライブラリは作成したユーザーライブラリから読み込まれ、それ以外の場合はクラスがJARに含まれるライブラリから読み込まれる点です。私は本当にこれが問題になるとは思わない –
どのように測定しましたか?このプロセスを実行するために使用したVMの引数はどれですか? – questzen
同じロギングレベルですか? – Adam
計算された時間をミリ秒単位で記録することでそれを測定します。私はLog4jを使用し、ログレベルは同じです= "DEBUG" –