[Java] JVM과 자바 실행 원리

2025. 4. 14. 14:42·공부/☕Java

(1) 자바의 프로그램 기본적인 동작 과정

[1] 소스 코드 작성 -> .java 소스 파일 생성

[2] 자바 컴파일러를 통해 .java 소스 파일을 .class(바이트 코드) 파일로 변환

[3] JVM을 통해 .class 파일을 기계어로 변환 -> 기계어는 운영체제를 통해 실행

[4] 결과적으로 운영체제가 프로그램을 실행함.

* 바이트코드 : 자바 컴파일러를 통해 JVM이 읽을 수 있도록 번역을 해놓은 코드를 바이트코드라고 한다.

 

(2) 자바 컴파일러

 - 사용자가 직접 작성한 .java 소스코드를 JVM 이 읽을 수 있도록 바이트코드로 번역을 해주는 프로그램이다.

 - 컴파일 과정에서 구문 분석, 타입 검사, 최적화, 바이트 코드 생성을 해준다.

 

(3) JVM(Java Virtual Machine)

 - 자바 바이트코드(.class)를 읽어서 운영체제나 CPU에 맞게 기계어로 변환하고 실행해주는 가상 머신이다.

 - 결국 컴퓨터는 0과 1인 기계어 밖에 못 읽기 때문에 그에 맞게 기계어로 번역을 해주는 프로그램이다.

 - 운영체제로 부터 공간을 할당 받으면, JVM은 해당 공간을 자체적으로 정의해서 사용을 하게 된다.

 - 이때 JVM이 해당 공간을 나눠서 이용을 하는데, 대표적으로 메서드, 힙, 스택 영역 등으로 나누어진다.

[1] JVM의 주요 역할

 - 클래스 로더 : .class 바이트 코드를 메모리에 올려주는 역할을 함.

 - 바이트코드 실행기 : 바이트코드를 해석해서 JIT 컴파일해서 실행을 해줌.

 - 메모리 관리 : 힙 / 스택 관리 + 가비지 컬렉션(자동 메모리 정리) 역할을 해줌.

 - 쉽게말해, OS에서 JVM에게 메모리를 할당 JVM은 그 안에서 힙/스택 등의 영역을 만들어서 이용함.

 - 결론은, 메모리 공간에서 Java 프로그램이 실행이 되는 것이다.

 

(4) 왜 JVM이 .java 소스 코드를 직접 실행하도록 안 만든 걸까?

 - 자바 컴파일러는 구문 분석, 타입 검사, 최적화 등 다양한 작업을 하기 때문에 오래걸릴 수 있음.

 - .class 바이트 코드는 이미 정리된 코드이기 때문에 컴파일 이후 JVM 실행이 오히려 속도 측면에서 유리함.

 - 컴파일러와 JVM을 나누게 되면 다른 언어도 JVM 위에서 실행이 가능하다는 큰 장점이 있음.

 - 언어에서 .class로 변환만 해주면 결국 다양한 언어를 만들 수 있다는 의미이다.

 

(5) 결론

 - 자바의 내부 동작에 대한 내용을 담았지만, 이해를 돕고자 표면적인 내용일 뿐 더 깊은 내용이 있다.

 - JVM과 자바 컴파일러 두 개를 쓰는 건 비효율 같지만 다 이유가 있다 이말이다..

 - 큰 틀을 잡았기 때문에 JVM 내부의 동작을 살펴보면 이해가 더욱 쉬울 것 이다.

'공부 > ☕Java' 카테고리의 다른 글

[Java] 추상화 - 추상클래스, 추상메서드, 인터페이스  (0) 2025.05.20
[Java] Enum 쉽게 이해하기  (1) 2025.05.05
[Java] Java와 객체지향 프로그래밍이란?  (0) 2025.03.06
[Java Design Pattern] 정적 팩토리 메서드  (0) 2024.11.10
[Java] 변수 초기화에 대한 이해  (2) 2024.11.05
'공부/☕Java' 카테고리의 다른 글
  • [Java] 추상화 - 추상클래스, 추상메서드, 인터페이스
  • [Java] Enum 쉽게 이해하기
  • [Java] Java와 객체지향 프로그래밍이란?
  • [Java Design Pattern] 정적 팩토리 메서드
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Java
    자바
    컴퓨터의 이해
    함수
    운영체제
    방송통신대학교
    파이썬
    알고리즘
    방통대
    방송대
    유비쿼터스
    그래프
    컴퓨터과학 개론
    배열
    이산수학
    spring
    C언어
    자료구조
    컴퓨터과학과
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[Java] JVM과 자바 실행 원리
상단으로

티스토리툴바