1. 개요
-Xint 옵션에 대해 알아보자.
-Xint 해석된 모드만 실행합니다.
영어 설명은 다음과 같다.
-Xint interpreted mode execution only
즉, JVM이 바이트코드를 JIT 컴파일하지 않고 인터프리터 모드로만 실행하도록 하는 옵션이다. 일반적으로 HotSpot JVM은 실행 중 자주 호출되는 메서드를 네이티브 코드로 컴파일해 성능을 높이는데, -Xint를 사용하면 이 컴파일 과정이 일어나지 않는다.
따라서 이 옵션은 성능 향상 목적보다는 JIT 컴파일의 영향을 배제하고 동작을 확인하거나, 컴파일러 관련 문제를 의심할 때 비교 테스트용으로 사용한다. 대신 일반 실행보다 성능이 크게 떨어질 수 있으므로 운영 환경에서 사용할 때는 주의해야 한다.
2. 테스트
2-1. 기본 옵션으로 실행
아무런 옵션을 주지 않은 상태에서 부하를 투입했다. 이후 jstat -compiler로 JIT 컴파일 통계를 확인했다.
$ /java/1.7/bin/jstat -compiler 8197 10s
Compiled Failed Invalid Time FailedType FailedMethod
351 0 0 5.08 0
351 0 0 5.08 0
392 0 0 5.81 0
396 0 0 5.82 0
396 0 0 5.82 0
397 0 0 5.84 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
400 0 0 5.89 0
411 0 0 6.08 0
413 0 0 6.10 0
413 0 0 6.10 0
Compiled 값이 증가하는 것을 보면, 실행 중 메서드가 JIT 컴파일되고 있음을 확인할 수 있다. Time 값도 컴파일에 사용된 시간이 누적되어 증가한다.
2-2. -Xint 옵션으로 실행
이번에는 -Xint 옵션을 주고 동일한 부하를 투입했다.
$ /java/1.7/bin/jstat -compiler 8455 10s
Compiled Failed Invalid Time FailedType FailedMethod
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
0 0 0 0.00 0
-Xint 옵션을 사용한 경우 Compiled와 Time 값이 계속 0으로 유지된다. 인터프리터 모드로만 실행되기 때문에 JIT 컴파일이 발생하지 않는 것이다.
3. 정리
-Xint는 JVM을 인터프리터 모드로만 실행하게 하는 옵션이다.- 이 옵션을 사용하면 JIT 컴파일이 수행되지 않으므로
jstat -compiler의Compiled값이 증가하지 않는다. - JIT 컴파일의 영향을 배제한 비교 테스트에는 유용하지만, 일반적으로 성능은 낮아질 수 있다.