티스토리 뷰

Tip and Error/JAVA

JAVA 컴파일 과정

geonwoopaeng@gmail.com 2021. 4. 17. 21:06

JAVA 컴파일 과정


Program -> JVM -> OS -> H/W

- Program -> JVM = 컴파일 타임 -> 런타임


java_compile2
java_compile

컴파일 타임

- 소스코드 작성 -> 컴파일 과정 통해 기계어 코드로 변환

- JAVA 파일을 JAVA 컴파일을 통해 바이트 코드로 변환


< 자세히 >

1. JAVA 클래스 파일(.java)을 JAVA 컴파일러(javac.exe)을 통해 JVM이 이해할 수 있는 중간 단계의 언어 바이트(.class)로 바꿔줍니다.


런타임

-컴파일 과정 후 프로그램이 실행, 응용프로그램이 동작 할 때

- Runtime Data Area -> Execution Engine -> java 인터프리터, JIT 컴파일러 -> 런타임 시스템 -> 운영체제 -> H/W


< 자세히>

2. 바이트(.class)를 JVM의 Class Loader에 전달

3. Class Loader가 Dynamic Loading(동적 로딩)을 통해 Class를 로딩, 링크하여 Runtime Data Area(JVM 메모리)에 올린다.

  • Class Loader 세부 동작 https://055055.tistory.com/50
    • 로드: class 파일을 JVM 메모리에 로드한다.
    • 검증: Java Language Specification(자바 언어 명세), JVM 명세의 구성이 맞는지 검사
    • 준비: class가 필요한 메모리 할당(메서드, interface)
    • 분석: class내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
      • 심볼릭 레퍼런스: 참조하는 대상의 이름만을 지칭한 것
    • 초기화: class 변수들은 적절한 값으로 초기화 된다.(static)

4. Excution Engine(실행 엔진)에서 2가지 방식으로 변경합니다.

=> 인터프리터 방식을 사용하다가 적정한 때에 JIT 컴파일러 사용

  • 인터프리터: 사용자가 작성한 소스코드를 한 문장 씩 보고 바로 기계어(실행 속도가 느림)
  • JIT 컴파일러(Just In Time): 바이트 코드 전체를 컴파일하여 기계어로 바꾸는 방식(실행 속도가 빠름)

출처: https://velog.io/@woo00oo/%EC%9E%90%EB%B0%94-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EA%B3%BC%EC%A0%95


반응형
공지사항
최근에 올라온 글