Java 프로그램이 실행되는 과정

김희영·2025년 10월 29일

토막개발지식

목록 보기
17/27

Java 프로그램이 실행되는 과정

소스코드 -컴파일러-> 바이트 코드 -클래스 로더-> 메모리 -Execution 엔진-> 실행

단계구성 요소역할결과물 / 설명
1. 소스 코드.java 파일개발자가 작성한 자바 코드사람이 읽을 수 있는 텍스트 형태의 코드
2. 컴파일러 (javac)Java Compiler.java 파일을 바이트코드로 변환.class 파일 생성 (JVM이 이해할 수 있는 중간 언어)
3. 바이트코드 (Bytecode).class 파일JVM이 실행할 명령어 집합 (플랫폼 독립적)기계어와 비슷하지만, 실제 CPU가 아니라 JVM이 해석
4. 클래스 로더 (Class Loader)JVM 내부 구성 요소필요한 .class 파일(바이트코드)을 메모리에 적재메모리에 클래스 정보가 로드됨
5. 메모리 (Runtime Data Area)JVM 메모리 구조프로그램 실행 중 사용하는 데이터 저장Method Area, Heap, Stack 등으로 구분
6. 실행 엔진 (Execution Engine)Interpreter / JIT Compiler메모리에 적재된 바이트코드를 실제로 실행바이트코드를 CPU가 이해하는 기계어로 변환 후 실행

함 바이트 코드를 열어서 확인해보자

gitBash로 다음을 입력
파일 생성하여 소스 작성:vi Main.java

입력 코드 예시

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

+) 저장 후 종료 → :wq

컴파일

javac Main.java

→ 같은 폴더에 Main.class 생성됨

바이트코드 보기

cat Main.class

또는

javap -c Main

javap 쪽은 바이트코드를 해석한 명령어 형태로 출력됨

출력 예시

$ javap -c Main
Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #13                 // String Hello bytecode
       5: invokevirtual #15                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

그렇다면 JVM이란??

JVM (Java Virtual Machine) = 자바 바이트코드를 실행하는 가상 컴퓨터

-> 즉, 실제 CPU나 OS에 상관없이,
JVM이 설치되어 있으면 어디서든 같은 바이트코드를 실행할 수 있음

그럼 JVM 언어란??

JVM 언어(JVM Language) = JVM이 이해할 수 있는 바이트코드(Bytecode) 로 변환되어 실행되는 언어

-> 즉, 다른 언어로 작성해도, 결국 JVM이 이해하는 바이트코드로 컴파일되면 실행 가능!

예시 : java, kotlin

profile
내는 반드시 엄청난 개발자가 되고 말것어

0개의 댓글