JVM (Java Virtual Machine)

Mark·2021년 10월 20일
0

Java

목록 보기
1/2

학습 목표

  • JVM의 내부 구조와 역할을 이해하고 설명할 수 있다.

1. JVM이란?

간략하게 JVM을 정의하자면 자바 바이트 코드(.class)를 해석하고 실행하는 가상 머신이다.

조금 더 자세히 설명하자면,
Application의 자바 바이트 코드(.class 파일)를 클래스 로드(Class Loader)를 통해 읽어 들여서 OS에 특화된 코드로 변환(인터프리터, JIT 컴파일러)하여 실행한다.
= 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 가상 머신이며 대표역할은 메모리 관리, Garbage Collector 수행

2. JVM 특징

1) 스택 기반의 가상 머신이다.
: 대표적인 컴퓨터 아키텍처인 인텔 x86 아키텍처나 ARM 아키텍처와 같은 하드웨어가 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다.

  • 레지스터를 사용하지 않고 스택을 사용하는 이유는?? : WORA(Write Once Run Anywhere)
    자바는 네트워크 다 기종의 디바이스에서 균일하게 동작함을 보장하고자 레지스터(디바이스 마다 레자스터의 수가 다르기에)를 사용하지 않고 스택을 사용

2) 심볼릭 레퍼런스
: 기본 자료형(primitive data type)을 제외한 모든 타입(클래스와 인터페이스 즉 참조타입)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 통해 참조한다.

3) 가비지 컬렉션(garbage collection)
: 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다.

3. JVM 구조

JVM의 구조는 대략 다음과 같이 3개의 영역으로 구분할 수 있으며, 내부 구조는 아래 사진과 같다.
1) Class Loader
2) Runtime Data Area
3) Execution Engine

1) Class Loader

Class Loader는 Loading -> Linking -> initialization 순으로 진행된다.

  • Loading
    .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 Runtime Data Area 영역에 있는 Method Area
    영역에 저장하며 저장되는 데이터는 아래와 같다.
    1) FQCN(Fully Qualified Class Name) : 패키지 이름 + 클래스 이름과 패키지 이름이 있다.
    2) Class, Interface, Enum
    3) 메소드와 변수
    로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 Runtime Data Area 영역에 있는 Heap 영역에 저장.

  • Linking
    Verify, Prepare, Reolve(optional) 세 단계로 나눠져 있다.

    Verify : Loading 단계에서 읽어드린 .class 파일 형식이 유효한지 체크(.class 파일 조작 검사)
    Preparation: 메모리를 준비하는 과정(클래스 변수(static 변수)와 기본값에 필요한 메모리
    Resolve: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.

  • initialization
    Static 변수의 값을 할당한다. (static 블럭이 있다면 이때 실행된다.)

2) Runtime Data Area

The Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are created on Java Virtual Machine start-up and are destroyed only when the Java Virtual Machine exits. Other data areas are per thread. Per-thread data areas are created when a thread is created and destroyed when the thread exits.

Runtime Data Area에는 Method Area, Heap Area, Java Stack, PC Registers,
Native Mehtod Stack으로 구성되어 있다.

  • Method Area

  • Heap Area

  • Java Stacks

  • PC Registers

  • Native Mehtod Stack


출처

(사진)
https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html
https://dzone.com/articles/jvm-architecture-explained

(내용)
https://d2.naver.com/helloworld/1230
https://www.inflearn.com/course/the-java-code-manipulation/dashboard
https://www.youtube.com/watch?v=UzaGOXKVhwU&t=865s
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.5

profile
지적인 힘이 부족하면 나의 불행을 확대 해석한다. 지적인 힘을 기르자!

0개의 댓글