2010-06-28 4 views
2

컴파일 된 메소드에 대한 로그 정보를 제공하는 플래그가 있습니다. 컴파일되지 않은 메소드와 컴파일되지 않은 이유에 대한 정보는 어디에 있습니까? 핫스팟 컴파일러가 어떻게 결정을 내리고 특정 메소드를 컴파일하지 않는 이유를 알면 JVM에 대한 더 나은 이해를 얻고 더 나은 코드를 작성하고 가능하면 일부 메소드를 최적화 할 수 있습니다. 누구든지이 주제에 대해 어떤 생각을 가지고 있습니까? 당으로핫스팟 JVM에서 메소드가 컴파일되지 않는 이유

답변

2

: http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

-XX : + PrintCompilation 인쇄 핫스팟 이 JIT 컴파일로 결심 한 각 Java 메소드의 이름을 알아. 이 목록은 보통 코어 Java 클래스 메소드를 처음에 표시하고 을 애플리케이션의 메소드로 바꿉니다.

내 개인적인 믿음은 당신의 많은 시간을 빨아 먹을 것입니다. 베스트 프랙티스와 상식을 사용하여 코딩 한 다음 성능이 문제가되는 경우 프로필을 작성하십시오. 당신은 잘해야합니다.

0

대답은 메서드가 충분히 실행되지 않은 경우 컴파일되지 않을 수 있다는 것입니다. 네이티브 코드 캐시는 제한되어 있으므로 모든 방법을 컴파일하는 것은 비생산적입니다. 컴파일 된 많은 메소드로 끝날 수 있지만 중요한 메소드는 더 이상 캐시 크기에 맞지 않습니다.

정확한 숫자

은 릴리스마다 다를 수 있지만, -XX:+PrintFlagsFinal 자바를 실행하면 당신은 값 15000을 가지고 Tier4CompileThreshold ((값 2000이있는) Tier3CompileThreshold를 포함, 당신이 조정할 수있는 설정을 모두 볼 수 있습니다). 따라서 2000 번 이상 호출하지 않으면 인터프리터를 통해 처리 할 수 ​​있습니다.

JIT 조건에서 프로파일 링을 수행하려면 이점을 확인하기 위해 메소드를 호출하는 상당한 수의 루프를 수행하거나 JMH과 같은 프로파일 링 하니스를 사용하여 프로파일 링을 올바르게 수행해야합니다.

관련 문제