Study/Java

[Java] 컴파일 과정

욘아리 2024. 4. 29. 15:38

자바를 사용하기 위해 JDK를 설치하면 자바 언어로 작성한 소스 파일을 만들고 컴파일할 수 있다. 오늘은 그 과정에 대해 아주 간단하게 정리해보려고 한다.

 

1. 자바 소스코드(.java) 작성

자바 소스코드는 사람이 이해하기 쉬운 자연어로 된 코드로 자바 소스 파일의 확장명은 .java이다.

 

2. 컴파일 - 바이트코드

소스 파일을 작성한 후에는 컴파일을 해야 한다. javac(java compiler) 명령어는 소스 파일을 컴파일하는데, 이 단계에서 나오는 파일은 확장명이 .class인 바이트 코드이다.

바이트 코드는 컴퓨터가 직접 읽을 수 없는 중간 형태의 코드이다.

 

윈도우, 맥OS, 리눅스 등 어떤 운영체제라 하더라도 동일한 소스 파일을 javac로 컴파일하면 모두 동일한 바이트코드 파일이 생성된다.

 

3. 자바 가상 머신(Java Virtual Machine, JVM)

 

바이트코드 파일을 특정 운영체제가 이해하는 기계어로 번역하고 실행시키는 명령어는 java이다.

java 명령어는 JDK와 함께 설치된 자바 가상 머신(JVM)을 구동시켜 바이트 코드 파일을 완전한 기계어로 번역하고 실행시킨다.

 

  • 컴파일된 바이트 코드는 JVM의 클래스 로더에 의해 메모리로 로딩된다. 프로그램의 클래스와 리소스들이 JVM의 런타임 데이터 영역에 적재되어 프로그램 실행에 필요한 준비를 완료한다.
  • 실행 엔진은 JVM 메모리에 올라온 바이트코드를 해석하고 실행한다. JVM 메모리에 올라온 바이트코드들을 명령어 단위로 하나씩 가져와 실행하는데, 실행 엔진은 두 가지 방식으로 변경한다.
    • 첫 번째는 바이트코드를 하나씩 읽어서 해석하고 실행하는 인터프리터 방식으로, 하나씩 읽어서 해석하기 때문에 전체적인 실행 속도가 느리다는 단점이 있다.
    • 이를 보완하기 위한 두 번째는 JIT 컴파일러 방식으로, 바이트코드 전체를 컴파일하여 바이너리 코드로 변경하고 직접 실행하는 방식이다. 하나씩 실행하는 것이 아니라 바이트코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 인터프리터 방식에 비해 전체적인 실행속도가 빠르다는 장점이 있다.

 

바이트코드 파일은 운영체제와 상관없이 모두 동일한 내용으로 생성되지만, 자바 가상 머신은 운영체제에서 이해하는 기계어로 번역해야 하므로 운영체제별로 다르게 설치된다. 그래서 운영체제별로 설치하는 JDK가 다른 것이다.

 

 

✨👩‍💻 ✨

간단하게 컴파일되는 과정을 정리해 봤는데, 다음에는 JVM 동작 과정에 대해 자세하게 정리해 봐야겠다.

 

 

 

출처

신용권, 임경균, 이것이 자바다

https://gyoogle.dev/blog/computer-language/Java/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.html