[Java] JVM 동작 원리

2024. 10. 23. 05:07·공부/☕Java

IDE는 자바 프로그램의 실행 명령어들을 대신 입력을 해주어 명령어를 몰라도 코드를 실행 할 수 있게 해준다. 이러한 추상화 덕분에 편리하지만 이러한 지식 없이 자바를 공부한다면 공부의 효율성이 떨어질 수 있다는 단점이 있다.

 

JVM(Java Virtual Machine) 동작 원리

JVM은 "java ClassName" 명령어를 통해 실행을 시킬 수 있게 된다. ClassName은 반드시 main 메서드가 들어있는 주 클래스여야 한다. JVM이 실행이 된 후 JVM의 부트스트랩 클래스 로더가 필요한 클래스 파일인 java.lang 패키지의 클래스 파일들을 먼저 로드 해준다. 이후, 애플리케이션 클래스 로더가 main 메서드 주 클래스를 로드를 해주게 된다. 이러한 과정이 다 끝나면, JVM은 main 메서드를 호출하여 실행을 시작하게 된다.

 

JVM 동작 순서

1. JVM 실행

2. JVM 운영체제로 부터 메모리 할당 ( Heap , Stack , Method Area )

3. (로드 과정) JVM 안의 클래스 로더 MyProject 메모리에 로드

-> 애플리케이션 클래스 로더가 main 주 클래스 MyProject를 메모리에 로드함.

4. JVM의 부트스트랩 클래스 로더를 통해 필요한 클래스 파일들 메모리에 로드

-> java.lang.Object , java.lang.String, java.lang.System 등 lang패키지 -> 필수적 로드 기본 클래스

-> 주 클래스에서 사용되는 static 초기화 블록 및 static 필드

5. main 메서드 실행

-> main 메서드가 실행 되고, JVM은 해당 바이트코드를 읽고 해석하여 기계어로 변환하게 된다.이 변환 과정은 JIT 컴파일러가 사용이 된다.

-> 변환 된 기계어는 운영체제를 통해 CPU에게 전달이 되고, CPU가 이 명령어를 실행하도록 지시를 하게 된다.

-> CPU는 운영체제 지시를 받고 기계어 명령어를 실행하고, 프로그램의 로직에 따라 작업을 수행한다.

6. 연관된 객체 생성 시 import 패키지 주소값 참조해서 JVM 클래스 로더 해당 클래스 메모리에 로드

-> 해당 클래스 로더는 애플리케이션 클래스 로더 이다.

-> ( 한 번 로드된 클래스는 JVM의 Method Area에 저장이 된다. 재사용성 증가 )

-> 이 후 객체 생성 시 Method Area에서 가져와 Heap 메모리 영역에 객체 생성

7. 소스 코드 전부 실행 후 main 메서드 종료 및 JVM 메모리 운영체제에 반납

 

 

Heap / Stack / Method Area 영역에 관한 내용은 다음을 기약하며...

JIT 컴파일러에 관한 내용은 다음을 기약하며...

JVM과 운영체제 및 CPU 상호 작용은 다음을 기약하며...

 

 

만약 JVM에 대해서 모든걸 알고싶다면 아래의 공식 문서를 참고...

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

 

The Java® Virtual Machine Specification

Tim Lindholm Frank Yellin Gilad Bracha Alex Buckley

docs.oracle.com

 

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

[Java] 변수 초기화에 대한 이해  (2) 2024.11.05
[Java] Annotation 이란? ( 애노테이션 )  (4) 2024.11.05
[Java] 클래스와 객체의 정의  (9) 2024.10.05
[Java] 상속 ( Extends )  (6) 2024.05.01
[Java] 예외 ( Exception )  (2) 2024.04.26
'공부/☕Java' 카테고리의 다른 글
  • [Java] 변수 초기화에 대한 이해
  • [Java] Annotation 이란? ( 애노테이션 )
  • [Java] 클래스와 객체의 정의
  • [Java] 상속 ( Extends )
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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[Java] JVM 동작 원리
상단으로

티스토리툴바