← 질문 목록
#65깊이 0

왜 모든 바이트코드를 바로 최적화하지 않는가?

언어 · 런타임심화성능

모두 최적화하면 시작이 느려지고 실행되지 않을 코드에도 비용을 쓴다. JVM은 실행 정보를 모아 자주 쓰이는 코드만 기계어로 최적화한다.

  1. 인터프리터
  2. 그다음은 프로파일입니다. 실행 횟수와 타입을 수집한다

    프로파일
  3. 그다음은 JIT입니다. 뜨거운 메서드와 루프를 고른다

    JIT
  4. 그다음은 기계어입니다. 인라이닝과 특수화를 적용한다

    기계어

HotSpot의 계층형 컴파일은 C1으로 빠르게 컴파일한 뒤 충분히 뜨거운 코드를 C2로 더 최적화한다. 시작 속도와 최고 성능을 절충한다.

JIT는 관찰된 타입을 바탕으로 가상 호출을 인라이닝할 수 있다. 가정이 깨지면 최적화 코드를 폐기하고 디옵티마이즈한다.

그래서 짧은 벤치마크는 워밍업과 컴파일 시간을 섞어 잘못 읽기 쉽다. JMH처럼 워밍업과 측정을 분리해야 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

왜 모든 바이트코드를 바로 최적화하지 않는가?