java는 기본적으로
source Code를 Compile 한후 ByteCode를 interprete해서 JVM에서 실행됨.
바로 기계어로 컴파일되는 언어들은 해당 빌드환경(운영체제)에 종속됨.
따라서 기본적으로 java가 속도가 더 느리다.
근데 느리기만 할까?
그래서 JIT(Just in Time) Compiler (적시에 기계어를 만들어낸다) 가 나오게 됨.
이를 통해 반복되는 컴파일을 기계어를 캐시하여 최적화한다.
하지만 어플리케이션이 시작될때는 캐시된 것이 없기 때문에 최적화가 일어나지 못한다.
그래서 warm up 단계를 두어 미리 최적화 단계로 접근할수 있게 한것!
Tiered comiliation은 아래의 레벨로 나누어짐
level0 - 인터프리터가 최초로 기계어로 번역하는 단계
level1 - 더이상 최적화가 필요없는 간략한 코드들을 컴파일하는 단계
level2 - 제한된 최적화가 적용되는 단계
level3 - 최적화가 적용되고 프로파일링이 되는 단계
level4 - 최대 최적화가 적용되는 단계, 프로파일링 되는 단계
샘플코드를 실행해 샘플코드에 대한 프로파일링 정보가 확인한다.
c2 레벨 4가 적용된 것을 알 수 있다. 그리고 임계치도 확인가능 (19000)
c1,c2가 얼마나 호출되었는지 카운트 한뒤 적절한 warm up count를 선택한다.
발표에서 예시된 문제는 250으로 설정하여 해결.
뒤로 갈수록 최적화가 더 잘이루어지지만 웜업 시간이 더 오래걸리기 때문에 적절한 카운트를 선택해야한다.