[자바] 자바 프로그램의 실행 과정 정리

컴파일부터 자바 프로그램 실행 흐름을 정리하였습니다.
도경원's avatar
Aug 01, 2025
[자바] 자바 프로그램의 실행 과정 정리

1. 자바 실행 단계 요약

컴파일 단계

  • .java → .class 로 변한
  • 도구 : javac (자바 컴파일러)
  • 결과 : 운영체제에 독립적인 바이트 코드를 생성
구성 요소
설명
소스 코드 (.java)
개발자가 작성한 자바 코드
자바 컴파일러 (javac)
소스 코드를 바이트 코드로 변환
바이트 코드 (.class)
JVM이 실행할 수 있는 중간 코드

런타임 단계

  • .class → 실행
  • 도구 : JVM (Java Virtual Machine)
구성 요소
설명
JVM
바이트 코드를 실행하는 가상 머신
클래스 로더
.class 파일을 JVM 메모리에 적재
실행 엔진
바이트 코드를 해석/실행 (JIT 컴파일 포함)
런타임 메모리 영역
실행 중 필요한 메모리 공간
OS & 하드웨어
실제로 프로그램이 동작하는 기반 환경

자바 프로그램의 실행 흐름

Application (자바 코드) → JVMOS → 하드웨어
💬
  • Application: 우리가 작성하는 코드 (Java, C 등)
  • JVM (Java Virtual Machine): 자바 코드를 OS와 독립적으로 실행하게 해줌
  • OS (운영체제): 하드웨어와 소통 (Shell 언어로 간접 제어), JVM 덕분에 OS 상관없이 실행 가능
  • 하드웨어: 최종적으로 2진수로 명령을 받아 작동

2. JVM의 런타임 데이터 영역

자바 프로그램이 실행될 때 JVM 내부 메모리는 아래와 같은 다섯 영역으로 나뉜다.
구분
설명
특징
메서드 영역
클래스 정보, static 변수, 상수 등
모든 스레드 공유
힙 영역
객체와 배열 저장 공간
new로 생성, 모든 스레드 공유
스택 영역
지역 변수, 매개변수, 호출 정보 등
스레드마다 개별 스택 프레임 존재
PC 레지스터
현재 실행 중인 명령 주소 추적
스레드별 존재
네이티브 메서드 스택
C/C++ 등의 native 메서드 실행 공간
native 키워드 사용 시 동작

메서드 영역

클래스 구조, 메서드 정보, 상수, 정적 변수 등 클래스 수준의 데이터를 저장한다. 모든 스레드가 공유하는 영역이다.
💬
예시)
클래스 파일(.class)에서 읽어온 클래스 정보, static 변수, 상수 등

힙 영역

new 키워드를 사용하여 생성된 객체(인스턴스)와 배열이 저장되는 공간이다. 모든 스레드가 공유하고, 동적으로 크기가 변한다.
💬
예시)
String str = new String("Hello"); 와 같이 생성된 객체, 배열 등이 힙 영역에 저장된다.

스택 영역

각 스레드마다 독립적으로 할당되며, 메서드 호출 시 생성되는 스택 프레임을 저장한다. 지역 변수, 매개변수, 메서드 호출 정보 등을 저장한다.
💬
예시)
메서드 내에서 선언된 기본 자료형 변수(int, double 등) 메서드 호출 시 생성되는 스택 프레임 등이 저장된다.
notion image
 
 
 
Share article

Gyeongwon's blog