2012-10-09 5 views
4

로컬 시스템에서 암호화 된 파일을 읽고 처리하는 Java 프로그램을 만들었습니다. 사실 나는 20 개의 파일을 읽어야하므로 프로그램 실행 속도를 높이는 스레딩 메커니즘을 사용했습니다.Eclipse에서 프로그램 실행이 명령 프롬프트와 비교할 때 매우 느립니다.

이클립스에서 프로그램을 실행하면 실행을 완료하는 데 30 분 이상 걸리는 반면, 실행 가능한 jar를 만들고 명령 프롬프트를 사용하여 프로그램을 실행하면 1 분 이내에 끝납니다.

Eclipse에서 실행중인 프로그램이 명령 프롬프트에서 실행하는 것보다 시간이 오래 걸리는 이유는 무엇입니까?

+2

'System.out'에 많은 것을 인쇄합니까? 왜냐하면 그것은 당신의 관찰을 즉시 설명 할 것이기 때문입니다. –

+1

@ MarkoTopolnik : 예 System.out을 사용하여 프로그램 논리에 따라 5-10k 번씩 인쇄합니다. 문제입니까? – Ran

+3

예, 그렇습니다. 출력물을 제거하면 곧바로 속도가 올라갑니다. Eclipse의 콘솔 뷰는 명령 행에서'stdout'보다 현저히 느립니다. –

답변

6

이클립스의 콘솔보기는 명령 행의 일반 stdout에 비해 속도가 매우 느릴 것입니다. 프로그램에서 많은 인쇄가 일어날 때마다 프로그램이 Eclipse에서 상당히 느리게 실행될 것으로 예상됩니다.

하지만 어쨌든 Unix 파이프를 통해 다른 프로그램과 통합하도록 설계된 프로그램을 작성하지 않는 경우 명령 줄에서도 성능이 저하되므로 인쇄를 최소화해야합니다.

+0

예, System.out에 주석을 달면 실행 속도가 빨라집니다. 감사. – Ran

0

특히 조건부 중단 점을 사용하는 경우 실제로 후자가 측정 할 수있는 차이가 있으므로 이클립스에서는 실행 작업을 사용하고 디버그에서는 실행하지 마십시오.

그러나 Debug의 사용으로 인해 덜 중요한 차이가 있음을 기억합니다.

+1

실행 작업 만 사용하고 디버그 메커니즘을 사용하지 않습니다. 아직도 나는 명령 프롬프트에 비해 처리하는 데 막대한 지연을 참조하십시오. – Ran

0

방금 ​​실험을 해본 결과 큰 차이를 보지 못했습니다. sin()100000000 번을 계산하는 클래스를 생성했습니다. 이 프로그램은 이클립스에서 ~ 15 초, 명령 프롬프트에서 ~ 14 초 실행되었습니다.

  1. 하는 디버그에서 실행되지 않도록해야합니다 :

    그래서, 여기에 내가 내 머리의 상단에 볼 수있는 시스템의 속도 저하의 이유가 있습니다. Debug가 아닌 Run 옵션을 사용하십시오.
  2. eclipse에서 일부 적용 범위/모니터링 개발자 도구가 없는지 확인하십시오. 예 : YourKit, Emma 등
  3. 프로그램이 콘솔에 중요한 인쇄물을 생성하지 않도록하십시오. 일식에서 실행할 때 충분한 힙 메모리가
  4. 점검
1

은 몇 가지 일반적인 실수가 있습니다

  • 은 아마 당신은 디버그 모드에서 프로그램을 실행하고 있습니다.

    봅니다

  • 어쩌면 당신은 다른 JVM으로 프로그램을 실행하는

    Project Properties->Java compilerWindow->Preferences->Java->Compiler을 살펴 보자 대신 디버그 (녹색 버그)의 실행 (녹색 원 안에 플레이 기호)를 사용하는 및 Window->Preferences->Java->Installed JREs

  • Eclipse JDT의 Java 콘솔과의 출력 및 입력 상호 작용은 표준 콘솔보다 성능면에서 다릅니다. System.out을 캡처

0

jdk 6에서 jdk 7로 변경하면 완벽하게 작동합니다. Window-> Preferences-> Java-> Installed JREs

관련 문제