Java

JVM -Xint 옵션과 Interpreted(인터프리트) 모드에 대하여

sstdio.h·2017년 3월 21일·조회 5,900

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 옵션을 사용한 경우 CompiledTime 값이 계속 0으로 유지된다. 인터프리터 모드로만 실행되기 때문에 JIT 컴파일이 발생하지 않는 것이다.

3. 정리

  • -Xint는 JVM을 인터프리터 모드로만 실행하게 하는 옵션이다.
  • 이 옵션을 사용하면 JIT 컴파일이 수행되지 않으므로 jstat -compilerCompiled 값이 증가하지 않는다.
  • JIT 컴파일의 영향을 배제한 비교 테스트에는 유용하지만, 일반적으로 성능은 낮아질 수 있다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.