method Inlining (JVM)

java core 2008. 11. 11. 02:30

출처

http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html

 

JVM에서 메소드 인라이닝이란, JVM이 메소드를 바로 호출하지 않고, 바로 그 자리에 리턴된 상수값또는 메소드를 넣어서 최대한 속도를 높이는 것을 말한다.

 

특징은 다음과 같다.

 

  • 메소드 콜이 없어서 부하를 낮춘다. No method call
  • 다이나믹 디스패치가 없다. No dynamic dispatch
  • 상수값이 주어지도록 한다. Possible to constant-fold the value, eg. "a.foo()+2" becomes 5 with no code executed at runtime.
  •  

    과거에는 final을 추가하여 inlining이 하도록 지시하게 하여 속도를 최대한 높일 수 있도록 하였다는 점이 주목적이다.

    (임베디드에서는 final이 필수적이다. 속도 빠르게 해야 와따니까.)

    하지만, 이런 테크닉이 모듈화에 적잖이 부담을 줄 수도 있다.

     

    그런데 말이지. HotSpot JVM은 final로 선언하지 않아도 알아서 inlining이 가능하다.

     

    모든 클래스들이 로딩할때마다 inlining을 하다가, 체크를 해보고 아니다 싶으면, 다시 도로 푸는 작업을 한다고 한다. deoptimized를 한다고 표현하고 있다.

     

     

    On every class load, all these assumptions are checked and, if violated, the now-incorrect compiled code is retired (deoptimized).

    Posted by 김용환 '김용환'

    댓글을 달아 주세요