2012-03-28 3 views
3

Eclipse에서 실행 가능한 Java SE 응용 프로그램이 있습니다. 보통 자바 6 SE 환경에서 작동하도록 JPA를 부트 스트랩합니다. 데이터베이스의 다른 테이블에 대한 각 요청은 100ms를 넘지 않습니다.응용 프로그램이 더 빨리 실행됩니다.

문제는 내가 runnable jar 파일을 내보낼 때 java -jar myapp.jar이라고 말하면 데이터베이스에 대한 각각의 요청은 약 9 초가 걸린다는 것입니다. 나는 일식

+2

어떻게 측정 했습니까? 어떤 VM을 args 프로세스를 실행하는 데 사용 했어? – questzen

+0

로깅 수준이 같습니까? – Adam

+0

계산 된 시간을 밀리 초로 기록하여 측정합니다. Log4j를 사용하고 로깅 수준이 동일합니다 = "DEBUG" –

답변

1

를 일으키는 클래스의 다른 버전을로드 않다면 두 버전에 클래스보고, 때마다 나는 데이터베이스에 요청을하고 있었는데, 나는 하나의 엔티티 관리자를 작성했다 :

Persistence.createEntityManagerFactory("mysqldb"); 

내가 그와 같은 단일 엔티티 공장 사용하는 엔티티 관리자의 생성 최적화하기 위해 :

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

public static EntityManagerFactory getEmf() 
{ 
    return em; 
} 

이것은 외식 응용 프로그램의 성능을 향상시키는 데 도움이되었지만, 이클립스 내부에서 실행할 때 성능에는 변화가 없습니다.

이클립스에서 응용 프로그램을 실행할 때 더 나은 이유가 무엇인지는 잘 모르겠지만이 솔루션은 잠시 동안 내 문제를 해결했습니다.

+0

+1 자신의 문제를 밖으로 정렬하고 여기에 따라 - 좋은 어딘가에 들었을 듣고 – davidfrancis

0

에서 실행할 때

은 내가 이클립스 컴파일러를 사용하는 방법을 모르겠습니다 응용 프로그램이 빠른 이유를 이해하지 않습니다. 일식에서 사용하는 개미 스크립트입니다 :

<?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를 추가하면 : 클래스 목록이 나타납니다. jar 파일을 내보낼 때 또는 java -jar myapp.jar -verbose를 실행할 때 : class nothing이 표시됩니다. –

+0

-verbose : class를 -jar 앞에 넣으십시오. – davidfrancis

+0

죄송합니다. 클래스 로딩의 콘솔 출력으로 파일을 생성하고 콘솔에서 diff를 사용하여 파일을 비교했습니다. 큰 차이점은 이클립스의 경우 라이브러리가 내가 작성한 사용자 라이브러리에서로드되는 반면, 다른 경우에는 클래스에 포함 된 라이브러리에서로드된다는 것입니다. 나는 이것이 문제가 될 수 있다고 정말로 생각하지 않는다. –

관련 문제