2009-06-24 4 views
1

Java 프로그램을 순차적으로 호출하는 bash 스크립트가 있습니다. 그것은 약간 까다 롭습니다. 그러나 주로 루프를 가지고 있고 다른 인수로 같은 java 프로그램을 약 1500 번 실행합니다.자바 프로그램의 순차적 실행 == jvm의 순차적 활성화?

제 질문은 Java 1.5 (Sun VM)를 사용할 때마다 Java 프로그램을 호출 할 때마다 jvm의 새 인스턴스가 만들어집니다. (내가 올바른 어휘인지 모르겠다.)

간접적 인 수준을 도입하여 모든 상황을 피하는 방법, 즉 모든 매개 변수의 목록을 작성한 다음이 매개 변수를 사용하는 하나의 Java 프로그램을 실행하고 실행 이전에 나의 진입 점은 무엇 이었습니까?

가 아니면 그런 거주자 또는 무언가로 JVM을 구성하여 문제를 해결하고 동적으로이 분명하다

희망 ....

들으 .... 내 프로그램을 호출 할 수 있습니다 ...

+0

예, JVM 시작이 프로그램의 실제 실행 시간을 왜소하게하지 않으면 매우 놀랍습니다. –

+0

나도 .. 내가 가기 전에 거기에 있었고 나는 정말로 나쁜 성능에 맞서 싸우고있다 ... 좋은 출발점이다 – LB40

답변

4

매개 변수를 파일에 저장하고 Java 프로그램을 사용하여 계속 재시작하지 않고 처리 할 수 ​​있습니다. ls | grep javals | grep java

편집 : 예를 들어, 콘솔을 통해 매개 변수를 실행중인 Java 응용 프로그램으로 파이프 할 수도 있습니다. Java 런타임이 고의적으로 메모리에 남아 있을지는 의문입니다. 아마도 대부분의 JRE 파일은 어쨌든 디스크 캐시에 남아있을 것입니다. Windows에는 Java 프로그램의 시작 시간을 줄이기 위해 JRE 파일을 보존하는 Java 빠른 시작 서비스가 있습니다. * nix와 비슷한 것이 있는지 모르겠다.

+0

그래, 그게 내가 실제로 시작한 일이야. – LB40

1

분명히 모든 매개 변수를 가지고 있고 그 후에 프로그램을 실행하는 것이 가장 좋은 해결책 일 것입니다. 당신이 어떤 이유로 그것을 할 수 없다면 나는 이것에 대해 매우 더러운 해결책을 가지고있다. 프로그램이 포트를 등록하고 입력을 기다립니다. 그런 다음 인수를 해당 포트에 전달하고 프로그램에서 새 인스턴스로 처리하도록합니다.

1

JVM 시작 속도가 느리기 때문에 악명이 높습니다. 물론 이와 같은 루프에서는 수행하지 않으려 고합니다. 불행히도 당신이 자바 프로그램에 명령 줄 매개 변수를 전달하는 경우 이것을 피할 수있는 유일한 방법은 Java 프로그램 자체를 어떤 방식 으로든 상호 작용의 다른 형식을 갖도록 수정하는 것입니다 (콘솔 또는 포트에서 또는 파일 읽기에서) . Java 프로그램을 변경할 수없는 경우 Java 빠른 시작 만 (가장 가까운 것) 솔루션입니다.

실제 해결책은 Java 프로그램을 변경하는 것입니다. 가장 분명한 변경 사항은 파일에 루프를 작성한 다음 한 번에 한 줄씩 파일을 읽는 Java 프로그램을 시작하는 것입니다. 이것은 루프가 매개 변수의 다음 세트에 대한 Java 프로그램의 결과를 신경 쓰지 않으면 작동합니다.

만약 그렇다면 적절한 해결책을 조언하기 위해 그 관계를 이해해야합니다. Savvas에서 제안한 소켓 솔루션은 일반적인 용도의 솔루션이지만 특정 용도에 따라 더 나은 옵션이있을 수 있습니다.

관련 문제