JIT 또는 AOT 컴파일러 사용 안함

JIT 또는 AOT 컴파일러에서 문제점이 발생하는 것으로 의심되는 경우 컴파일을 사용 안함으로 설정한 후 문제점이 남아 있는지 확인하십시오. 문제점이 계속 발생하는 경우 컴파일러가 문제점의 원인이 아님을 알 수 있습니다.

이 태스크에 대한 정보

기본적으로 JIT 컴파일러는 사용으로 설정됩니다. AOT 컴파일러는 기본적으로 사용 가능하지만 공유 클래스가 사용 가능한 경우에만 활성화됩니다(공유 클래스에 대한 자세한 정보는 OpenJ9 사용자 문서의 클래스 데이터 공유 소개 참조). 효율성을 위해 Java™ 애플리케이션의 모든 메소드가 컴파일되는 것은 아닙니다. JVM은 애플리케이션의 각 메소드에 대한 호출 개수를 유지보수합니다. 메소드가 호출되고 해석될 때마다 해당 메소드에 대한 호출 개수가 증가됩니다. 개수가 컴파일 임계값에 도달하면 메소드가 컴파일되고 원래대로 실행됩니다.

호출 개수 메커니즘은 가장 자주 사용되는 메소드에 더 높은 우선순위를 지정하여 애플리케이션의 수명 동안 메소드 컴파일을 전개합니다. 일부 자주 사용되지 않는 메소드는 전혀 컴파일되지 않을 수도 있습니다. 결과적으로 Java 프로그램이 실패하면 문제점이 JIT 또는 AOT 컴파일러에 있거나 JVM의 다른 위치에 있을 수 있습니다.

실패 진단의 첫 번째 단계는 문제점이 발생한 위치를 판별하는 것입니다. 이를 수행하려면 먼저 순수하게 해석된 모드에서 Java 프로그램을 실행해야 합니다 (즉, JIT및 AOT 컴파일러를 사용하지 않음).

프로시저

  1. 명령행에서 -Xjit-Xaot 옵션 (및 수반되는 매개변수) 을 제거하십시오.
  2. -Xint 명령행 옵션을 사용하여 JIT및 AOT 컴파일러를 사용 안함으로 설정하십시오.
    성능상의 이유로 프로덕션 환경에서는 -Xint 옵션을 사용하지 마십시오.

다음에 수행할 작업

컴파일이 사용 불가능한 상태에서 Java 프로그램을 실행하면 다음 상황 중 하나가 발생합니다.

  • 실패가 지속됩니다. JIT 또는 AOT 컴파일러에 문제점이 없습니다. 일부 경우에 프로그램이 다른 방식으로 실패하기 시작할 수 있지만 컴파일러와 관련된 문제점이 아닙니다.
  • 실패가 없어집니다. JIT 또는 AOT 컴파일러에 문제점이 있을 가능성이 높습니다.
    공유 클래스를 사용 중이지 않은 경우 JIT 컴파일러에 결함이 있는 것입니다. 공유 클래스를 사용 중인 경우 JIT 컴파일만 사용으로 설정된 상태로 애플리케이션을 실행하여 결함이 있는 컴파일러를 판별해야 합니다. -Xint 옵션 대신 -Xnoaot 옵션을 사용하여 애플리케이션을 실행하십시오. 이렇게 하면 다음 상황 중 하나가 발생합니다.
    • 실패가 지속됩니다. JIT 컴파일러에 문제점이 있습니다. JIT 컴파일러만 결함이 있는지 확인하기 위해 -Xnoaot 옵션 대신 -Xnojit을(를) 사용할 수도 있습니다.
    • 실패가 없어집니다. AOT 컴파일러에 문제점이 있습니다.