Hadoop 책에서 일부 발번역함
태스크 JVM 재사용하면 태스크들이 하나의 JVM에서 동시에 실행할 수는 없다. JVM은 순차적으로 태스크를 실행한다. 그러나 태스크트랙커들은 한번에 하나 이상의 태스크를 실행할 수 있지만 이것은 항상 분리된 JVM에서 이루어진다. 태스크트랙커의 맵과 리듀스 태스크수를 제어하기 위한 속성은 메모리를 설명하는 부분에서 나올 것이다.
태스크 JVM 재사용을 제어하기 위한 속성은 mapred.job.reuse.jvm.num.tasks: 이것은 각 JVM에 job을 실행하기 위한 태스크의 최대수를 지정한다. 다양한 job들의 태스크들은 항상 분리된 JVM에서 실행한다. 만약에 속성값이 -1이면 JVM을 공유하는 태스크의 수에 대한 제한이 없다.(물론 동일한 Job이어야함) JobConf.setNumTasksToExecutePerJvm() 메소드를 가지고 속성을 설정할 수 있다.
CPU를 소비하는 태스크들은 핫스팟 JVM에 적용된 런타임 최적화의 이점을 이용하여 태스크 JVM을 재사용하는 것이 유용할 수 있다. 한 동안 실행된 후, HotSpot JVM은 성능과 밀접한 부분을 찾아내기 위한 충분한 정보를 만들고 이러한 부분들에 대해 동적으로 자바 바이트 코드를 네이티브 코드로 변환한다. 이러한 작업은 오래 걸리는 처리에 대해 좋지만 단지 몇분 걸리는 실행은 이러한 장점이 별반 영향이 없다. 이러한 경우들에서 태스크 JVM 재사용을 가능케하는 가치가 있다.
공유 JVM이 유용한 또 다른 곳은 job의 태스크들 사이에서 상태를 공유할 때 이다. 정적 필드에서 레퍼런스데이터를 저장하여 태스크들은 공유데이터를 빠르게 접근한다.