Java Compiler에 대해서

Red Culture·2021년 7월 18일
0

컴파일러

자바 컴파일러는 자바를 가지고 작성한 자바 소스 코드(.java)를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드(.class)로 변환시켜주는 역할을 한다. (javac.exe)

컴파일 과정


1) 자바 소스 파일(.java)을 작성하면 컴파일러가 소스 파일을 컴파일한다.
2) 컴파일 후 나오는 파일은 자바 바이트 코드 파일(.class) 파일이고 JVM이 읽을 수 있는 파일이다. 이 파일을 JVM의 클래스 로더에게 전달한다.
3) 클래스 로더는 동적 로딩(실행 중에 데이터 타입을 알고 바인딩 되는 방식)을 통해 필요한 클래스들을 런타임 데이터 영역인 JVM 메모리에 올린다.

  • 클래스 로더 동작 과정
    1) 로드: 클래스 파일을 가져와서 JVM 메모리에 올린다.
    2) 검증: 자바 언어 명세, JVM 명세에 명시된 대로 구성되었는지 검사한다.
    3) 준비: 클래스가 필요로 하는 메모리를 할당한다.
    4) 분석: 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다.
    5) 초기화: 클래스 변수들을 초기화한다. (static 필드)

4) 실행엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다.

  • 인터프리터 방식
    -바이트 코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나하나의 실행은 빠르나, 전체적인 실행속도가 느리다는 단점이 있다.
  • JIT(Just-In-Time Compiler) 컴파일러 방식: 인터프리터의 단점을 보완한 방식이다. 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 변경된 메서드는 더 이상 인터프리팅하지 않고 바이너리 코드로 직접 실행하는 방식이다. 하나씩 인터프리팅 해서 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행 속도가 인터프리터 보다 빠르다.
    (*바이너리 코드는 컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드)

*참고 자료
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

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글