본문 바로가기

Programming/Java

JAVA 프로그램이 실행되는 흐름

반응형

자바 프로그램이 실행되는 과정 세부적 설명

자바(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(자바 가상 머신)에 의해 로드됩니다.

클래스 로더의 종류

  1. Bootstrap ClassLoader - java.lang과 같은 기본 클래스 로드
  2. Extension ClassLoader - lib/ext 폴더 내 확장 클래스 로드
  3. Application ClassLoader - 사용자가 직접 작성한 클래스를 로드

4. 링킹 (Linking) - JVM 바이트코드 활성화

로드된 클래스는 실행되기 전에 링킹(Linking) 단계를 거칩니다.

링킹의 3가지 단계

  1. 검증 (Verification) - 바이트코드가 유효한지 검사
  2. 준비 (Preparation) - static 변수 메모리 할당 및 기본값 초기화
  3. 해석 (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)를 실행하여 불필요한 메모리를 정리합니다.

최종 정리: 자바 프로그램 실행 흐름

  1. 소스 코드 작성 - .java 파일 생성
  2. 컴파일 - .java.class (바이트코드 변환)
  3. 클래스 로딩 - JVM이 .class 파일을 메모리에 로드
  4. 링킹 - 검증, 준비, 해석 수행
  5. 초기화 - static 블록 실행 및 main() 실행 준비
  6. 실행 - main() 실행 (JIT 최적화)
  7. 종료 - 프로그램 종료 및 가비지 컬렉션 수행
반응형