inblog logo
|
Gyeongwon's blog
    Java

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

    컴파일부터 자바 프로그램 실행 흐름을 정리하였습니다.
    도경원's avatar
    도경원
    Aug 01, 2025
    [자바] 자바 프로그램의 실행 과정 정리
    Contents
    1. 자바 실행 단계 요약컴파일 단계2. JVM의 런타임 데이터 영역

    1. 자바 실행 단계 요약

    컴파일 단계

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

    런타임 단계

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

    자바 프로그램의 실행 흐름

    Application (자바 코드) → JVM → OS → 하드웨어
    💬
    • 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
    Contents
    1. 자바 실행 단계 요약컴파일 단계2. JVM의 런타임 데이터 영역

    Gyeongwon's blog

    RSS·Powered by Inblog