코디잉

자바 프로그램은 어떻게 컴파일되고 실행될까? 본문

CS/Java

자바 프로그램은 어떻게 컴파일되고 실행될까?

yong_ღ'ᴗ'ღ 2025. 12. 15. 22:24

자바 프로그램의 컴파일과 실행 과정

자바 프로그램은 컴파일 단계실행 단계를 거쳐서 실행된다.

그동안 이 흐름을 막연하게 알고 있었는데, 다시 공부하고 정리하면서 IDE가 가려주던 실행 과정을 더 명확히 이해할 수 있었다.

 

 


🔄 전체 흐름

자바 소스 코드(Hello.java)는 javac 컴파일러를 통해 바이트코드 파일(Hello.class)로 컴파일된다.

이후 java 명령을 실행하면 운영체제가 JVM  프로세스를 실행하고, JVM은 Hello.class 파일을 로드하여 내부에서 실행한다.

 

즉, 자바 프로그램을 실행한다는 것은
.class 파일을 직접 실행하는 것이 아니라
JVM을 실행하고 그 안에서 class 파일을 실행하는 것을 의미한다.

 


🛠️ 컴파일 단계 (javac)

자바 소스 코드는 javac 컴파일러를 통해 컴파일된다. 

javac 파일명.java
# 예: javac Hello.java

이 과정에서 다음과 같은 작업이 수행된다.

  ◽  .java 파일이 .class 파일로 변환된다.

   자바 소스 코드는 JVM이 이해할 수 있는 바이트코드로 변환된다.

   문법 오류, 타입 오류 등을 포함한 컴파일 타임 오류를 미리 검출할 수 있다.

    주석과 같은 소스 코드 수준의 메타 정보는 제거된다.

 

컴파일 단계의 목적은

실행 전에 최대한 많은 오류를 잡고, JVM이 실행할 준비를 마치는 것이다.

 


▶️ 실행 단계 (java)

컴파일된 .class 파일은 java 명령을 통해 실행한다.

java 클래스명
# 예: java Hello
 

이 명령을 실행하면 다음 순서로 동작한다.

  (1) 운영체제가 JVM 프로세스를 실행한다.

  (2) JVM은 Hello.class 파일을 로드한다.

  (3) 로드된 바이트코드를 실행한다.

 


⚙️ JVM의 실행 방식 (인터프리터 & JIT)

JVM은 바이트코드를 실행할 때

인터프리터 방식JIT(Just-In-Time) 컴파일 방식을 함께 사용한다.

 

(1) 처음 실행될 때

  ◽   인터프리터가 바이트코드를 한 줄씩 해석해서 실행한다.

  ◽   빠르게 실행을 시작할 수 있지만 성능은 상대적으로 낮다.

 

(2) 실행 중 (Hot Spot 판단)

  ◽   JVM이 자주 실행되는 코드를 감지한다.

  ◽   해당 코드를 JIT 컴파일을 통해 기계어로 변환한다.

 

(3) 이후 실행

  ◽   해석 없이 컴파일된 기계어로 바로 실행된다.

  ◽   실행 성능이 향상된다.

 

즉, 하나의 코드는 실행 생애 동안

해석 → JIT 컴파일 → JIT 코드 실행

이 흐름을 모두 거칠 수 있다.

 


✨ IDE가 해주는 일

IntelliJ와 같은 IDE에서 실행 버튼(Run)을 누르면, 컴파일과 실행 과정을 모두 자동으로 처리해준다.

  ◽  내부적으로 javac, java 명령을 실행

    컴파일된 .class 파일은 out 디렉토리에 생성

 

.class 파일은 바이트코드로 구성되어 사람이 직접 읽기 어렵지만,

IDE는 이를 디컴파일하여 원본 자바 소스 코드와 유사한 형태로 보여준다.

디컴파일된 코드는 실제 소스 코드가 아니며, 주석이나 일부 정보는 포함되지 않는다.

 

💬 이 글은 인프런 김영한님의 자바 강의를 듣고,
자바 프로그램의 컴파일과 실행 과정을 다시 이해하며 정리한 내용입니다.
Comments