Skip to content

Latest commit

 

History

History
53 lines (42 loc) · 2.83 KB

2. Java Compile.md

File metadata and controls

53 lines (42 loc) · 2.83 KB

Java 컴파일

HotSpot

  • Oracle이 만든 JVM의 이름이 Java HotSpot Performance Engine입니다.
    줄여서, HotSpot VM이라고 부르거나, HotSpot이라고 부릅니다.
  • 즉, HotSpot은 Oracle이 만든 JVM의 제품명입니다.

C/C++ 컴파일

  • C/C++ 컴파일러는 C/C++ 소스 코드를 기계어 코드로 변환합니다.
  • C/C++ 소스 파일을 컴파일하여 생성된 *. exe 실행 파일에는 기계어 코드가 들어있습니다.
  • *. exe 파일은 직접 CPU에서 실행됩니다.
  • 실행 파일의 구조는 OS에 따라 다릅니다.

표준 Java 컴파일

  • 표준 Java 컴파일러는 Java 소스 코드를 바이트 코드로 컴파일합니다.
  • *. java 소스 파일을 컴파일하여 생성된 *. class 파일에는 바이트 코드가 들어있습니다.
  • JVM이 *. class 파일을 읽어 바이트 코드를 실행합니다.

    표준 Java 컴파일러 실행 파일은 javac.exe
    표준 Java 가상 기계 실행 파일은 java.exe

바이트 코드로 컴파일 하는 이유

  • 기계어 코드로 컴파일 하지 않고 바이트 코드로 컴파일 하는 방식의 장단점은 다음과 같습니다.

장점

  • CPU와 OS에 독립적입니다.
  • JVM만 있으면 실행할 수 있습니다.

단점

  • 느립니다. (CPU가 기계어 코드를 직접 읽어 실행하는 방식이 가장 빠릅니다.)

JIT 컴파일 (Just In Time compliation)

  • Java는 JIT 컴파일 방식을 사용합니다.
  • JIT 컴파일이란, 바이트 코드를 실행하기 직전에 기계어 코드로 컴파일하는 방식을 뜻합니다.
    • JVM은 실행하기 직전, 바이트 코드를 기계어 코드로 변환(컴파일)해서 실행합니다.
    • 바이트 코드를 해석해서 실행하는 것(인터프리터 방식)보다 기계어 코드로 변환해서 실행하는 것이
      훨씬 더 빠르기 때문입니다.
  • JVM 내부에는 JIT 컴파일러가 내장되어 있습니다.

JVM JIT 컴파일 방식의 장단점

  • 장점 : dynamic optimization 가능
  • 단점 : 변환된 기계어 코드를 따로 저장하지 않기 때문에, 실행할 때마다 매번 JIT 컴파일을 해야 합니다.

dynamic optimization

  • 컴파일러가 소스 코드를 컴파일할 때,
    소스 코드와 동일한 순서로 기계어 코드를 생성하지 않고, 더 빠르고 효율적으로 실행될 수 있도록
    실행 순서를 재배치하고 조정하여 기계어 코드를 생성하는 것을
    컴파일러 최적화(compiler optimization)이라고 합니다.

  • 소스 코드를 컴파일할 때가 아니고,
    실행하는 시점에 실행 순서를 재배치하고 조정하여 기계어 코드를 생성하는 것을 동적 최적화(dynamic optimization) 라고 합니다.

  • JVM의 JIT 컴파일러는 dynamic optimization을 수행합니다.