반응형
자바 프로그램이 실행되는 과정 세부적 설명
자바(Java)는 클래스 및 메서드 기반의 객체 지향 프로그래밍 언어로, 여러 프로세스에서 가장 많이 사용되는 언어 중 하나입니다. 이번 글에서는 자바 프로그램이 실행되는 과정을 쉽게 이해할 수 있도록 단계별로 정리해 보겠습니다.
1. 소스 코드 작성 (.java 파일)
자바 프로그램은 먼저 .java 파일로 작성됩니다.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
2. 컴파일 (javac) - 바이트코드 생성
.java 파일을 자바 컴파일러(javac)를 사용하여 .class 파일(바이트코드)로 변환합니다.
javac HelloWorld.java
컴파일이 완료되면 HelloWorld.class 파일이 생성됩니다.
3. 클래스 로딩 (Loading) - JVM의 클래스 로딩 과정
자바 프로그램을 실행하면 .class 파일이 JVM(자바 가상 머신)에 의해 로드됩니다.
클래스 로더의 종류
- Bootstrap ClassLoader - java.lang과 같은 기본 클래스 로드
- Extension ClassLoader - lib/ext 폴더 내 확장 클래스 로드
- Application ClassLoader - 사용자가 직접 작성한 클래스를 로드
4. 링킹 (Linking) - JVM 바이트코드 활성화
로드된 클래스는 실행되기 전에 링킹(Linking) 단계를 거칩니다.
링킹의 3가지 단계
- 검증 (Verification) - 바이트코드가 유효한지 검사
- 준비 (Preparation) - static 변수 메모리 할당 및 기본값 초기화
- 해석 (Resolution) - 심볼릭 참조를 실제 메모리 주소로 변환
5. 초기화 (Initialization) - static 블록 실행
- static 블록 실행
- static 변수에 실제 값 할당
public class Example {
static int count = 0;
static {
System.out.println("클래스가 초기화됩니다.");
count = 100;
}
public static void main(String[] args) {
System.out.println("count: " + count);
}
}
6. 실행 (Execution) - JIT 컴파일러 적용
JVM은 main() 메서드를 실행하며, 모든 명령어는 **인터프리터(Interpreter)**와 JIT(Just-In-Time) 컴파일러를 통해 실행됩니다.
7. 프로그램 종료 (Termination) - GC (가비지 컬렉터) 처리
- 프로그램이 종료되면 JVM은 GC(Garbage Collector)를 실행하여 불필요한 메모리를 정리합니다.
최종 정리: 자바 프로그램 실행 흐름
- 소스 코드 작성 - .java 파일 생성
- 컴파일 - .java → .class (바이트코드 변환)
- 클래스 로딩 - JVM이 .class 파일을 메모리에 로드
- 링킹 - 검증, 준비, 해석 수행
- 초기화 - static 블록 실행 및 main() 실행 준비
- 실행 - main() 실행 (JIT 최적화)
- 종료 - 프로그램 종료 및 가비지 컬렉션 수행
반응형
'Programming > Java' 카테고리의 다른 글
JAVA ArrayList vs LinkedList 차이점과 선택 기준 (0) | 2025.04.10 |
---|---|
JAVA HashMap vs Hashtable vs ConcurrentHashMap 차이점 (0) | 2025.04.10 |
Java를 활용한 SFTP 파일 다운로드: 가장 최근 변경된 파일 찾기 (1) | 2025.04.08 |
Java Collections Framework (JCF) 상세 설명 (0) | 2025.04.07 |
자바에서 List 중복 제거 방법 (0) | 2025.04.07 |