2009-05-13 6 views
3

Ant Java taskfork 매개 변수를 제공합니다.이 매개 변수는 정의에 따라 "활성화 된 경우 다른 VM에서 클래스 실행을 트리거합니다"입니다. 방대한 양의 데이터를 처리 할 때이 매개 변수를 설정하면 Java 힙 공간이 부족 해지는 것을 막을 수 있습니다.
우리는 자바 클래스를 통해 동일한 작업을 수행 할 수 있기를 원합니다. fork에서 제공하는 기능을 구현하는 가장 좋은 방법은 무엇입니까?Ant의 Java 작업에서 Java 포크와 동일합니까?

+0

실행하려면 -Xmx 및 -Xms 옵션을 사용하는 것보다 더 많은 힙이 필요합니다. 당신의 앱. 어쩌면 처음부터 여러 개의 프로세스, 더 많은 메모리가 필요하지 않을 수도 있습니다. 동일한 JVM 내에서 스레드 및 동시성 프리미티브를 사용할 수 있다는 이점이 있습니다. – basszero

+0

오른쪽. 우리는 Xms와 Xmx를 다양한 값으로 설정함으로써 시도했지만 도움이되지 않았습니다. 프로그램은 결국 설정 한 값에 따라 다른 지속 시간 동안 실행 한 후 충돌했습니다. 분명히 메모리와 관련이 있지만 Ant (포크 세트 사용)를 통해 호출했을 때는 결코 직면하지 않았습니다. – pugmarx

답변

8

다른 Java 프로세스를 실행하십시오. ProcessBuilder 클래스를 사용하여 예를 들어.

http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html

당신이 원하는대로 당신은 많은 작업자 프로세스를 실행할 수 있습니다. 그들에게 분리 된 메인 클래스를 가지게하고, 메인 클래스에서 그들의 작업을하고, 그들의 작업이 끝나면 종료하십시오.

당신은 클래스 패스와 시스템상의 자바 바이너리의 위치를 ​​알아 내야 만 할 것이다.

Process.waitFor()를 통해 완료 할 때 알림을받을 수 있다고 생각합니다.

+0

그러나 동일한 VM에 있다고 생각합니다. –

+4

아니요, 프로세스를 실행하면 다른 VM이됩니다. 두 가지 다른 프로세스는 어떤 방법으로도 하나의 VM을 공유 할 수 없습니다. – alamar

0

직접 Ant API를 사용할 수 있다고 생각합니다 ... Ant는 Java 클래스에서 직접 사용할 수 있습니다. Javadoc은 바이너리 배포판에서 사용할 수 있습니다. 당신이 ant 소스 코드를 보면 forktrue, 때

3

, 그것은 단지 Execute 작업을 래핑 결국, 호출되는 코드는

Runtime.getRuntime().exec(cmd, env); 

다운로드하고 소스 코드를 살펴 가진 org.apache.tools.ant.taskdefs.Javaorg.apache.tools.ant.taskdefs.Execute을 사용하면 플랫폼 독립적 인 방식으로 실행되도록 실행 파일의 위치를 ​​찾는 데 유용한 정보를 얻을 수 있습니다.

관련 문제