Skip to content

HotSpot (virtual machine)

HotSpot, released as Java HotSpot Performance Engine, is a Java virtual machine for desktop and server computers, developed by Sun Microsystems which was purchased by and became a division of Oracle Corporation in 2010. Its features improved performance via methods such as just-in-time compilation and adaptive optimization. It is the de facto Java Virtual Machine, serving as the reference implementation of the Java programming language.

About

Hotspot JVM은 미국의 Longview Technologies LLC라는 회사에서 1999년에 처음 발표한 JVM이다. 이후 SUN에 인수되었으며, 1.2버전부터 SUN의 기본적인 JVM이 되었다. 현재 Hotspot JVM은 가장 일반적인 JVM 중 하나이다.

Hotspot은 말 그대로 Hot한 Spot을 찾아서 해당 부분에서는 JIT 컴파일러를 사용하는 방법이다. 내부적으로 프로파일링을 통해 핫스팟을 찾아내고, 해당 부분에 대한 네이티브 코드를 생성한다. 이때 네이티브 코드를 생성하는 방법에서 Client와 Server라는 두가지 방법이 존재한다.

HotSpot JVM - Client

클라이언트 모드에서 동작하는 컴파일러는 주로 프로그램의 시작 시간을 최소화하는데에 집중한다. 크게 세 단계로 이루어져있다.

  • 바이트 코드를 해석해서 최적화를 쉽게하기 위해 HIR이라는 정적 바이트코드 표현을 만든다
  • HIR로부터 플랫폼에 종속적인 중간표현식(LIR)을 만든다
  • LIR을 사용하여 기계어를 생성한다.

클라이언트 모드 JIT의 특징은 바이트코드로부터 최대한 많은 정보를 뽑아내어 실제 동작하는 코드블럭에 대한 최적화에 집중하는 것이다. 전체적인 최적화에는 관심없다.

HotSpot JVM - Server

서버의 JIT은 부분적인 코드 실행보다는 전체적인 성능 최적화에 관점을 둔다.

  • 일반적인 컴파일러 최적화 기술들을 이용해 일단 코드들을 최적화 한다
  • 죽은 코드 삭제(Dead Code Elimination), loop 변수의 끌어올리기(Loop invariants hoisting), 공통 부분식 제거(Common Subexpression Elimination), 상수 지연(Constant propagation), 전역 코드 이동(Global Code motion) 등
  • 자바에 최적화된 최적화를 진행한다.
  • Null Check 삭제, 배열의 Range Check 삭제, 예외처리 경로 최적화. 대단위 RICS 레지스터들을 최대한 활용하기 위한, Graph연산을 통한 register할당

See also

Favorite site