모르는게 많은 개발자

[JAVA] JVM 개념 및 구조 본문

자바

[JAVA] JVM 개념 및 구조

Awdsd 2020. 6. 9. 23:31
반응형

1. JVM(JAVA Virtual Machine)이란?

자바 가상 머신의 줄임말이다. 쉽게 말해 자바 프로그램을 실행시키는 소프트웨어이다.
JVM은 자바와 운영체제(OS)에서 중개자 역할을 하여 OS에 구애받지 않고 자바 프로그램을 실행할 수 있다.


2. JVM 구성

JVM 구성도

JVM은 크게 Class Loader, Execution Engine, Garbage Collector, Runtime Data Area로 구성되어있다.

 

Class Loader

자바 프로그램을 작성하면 .java파일을 만들게 된다. 

그리고 실행을 하게 되면 컴파일을 통해 .class(바이트코드)를 생성한다. 

Class Loader는 이 .class파일들을 Runtime Data Areas에 적재하는 역할을 한다.

 

Excution Engine

Class Loader에 의해 Runtime Data Areas에 적재된 .class파일들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다. 여기서 명령어 실행하는 방법에는 Interpreter, JIT(Just-In-Time)컴파일러 두가지 방법이있다.

  • Interpreter는 명령어를 하나하나 실행하는 방법
  • JIT는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 실행하는 방법이다.

 

Runtime Data Areas

자바 프로그램을 실행할 때 사용되는 데이터들을 저장하는 영역이다.
영역은 Method(static) Area, Heap Area, Stack Area, PC Register, Native Method Stack이 있다.

  • Method(static) Area(메소드 영역)
    클래스 멤버 변수, 메소드등 클래스의 정보를 저장하고, static 변수 저장. 
    Method Area에 포함된 ConstantPool에서 문자 상수, 메소드, 필드에 대한 레퍼런스 저장한다.

  • Head Area(힙 영역)
    n
    ew 키워드로 생성되는 객체와 배열이 생성되는 영역이다.
    메소드 영역에 적재된 클래스만 생성가능, GC를 통해 메모리 관리되는 영역
  • Stack Area(스택 영역)
    지역 변수, 매개변수, 리턴 값등이 생성되는 영역이다.
    메소드 호출때마다 스택 영역이 생성된다.
    int a=10; 라고 선언시 스택 영역에 메모리 공간을 a라 잡고 10이라는 값이 들어간다.
    클래스 변수 Person p = new Person()이라고 선언시 스택 영역에 p가 생성되고 new Person() 인스턴스는 힙 영역에 생성된다. 그리고 p에는 인스턴스 힙영역 주소를 저장한다.
    즉, 스택 영역의 p가 힙 영역의 인스턴스를 참조하는 것이다.

  • PC Register
    쓰레드가 생성될때마다 생성되는 영역으로 현재 실행되는 쓰레드의 주소와 명령을 저장

  • Native Method Stack Area
    자바 외 언어로 작성된 네이티브 코드를 위한 영역(JAVA NATIVE INTERFACE)


Garbage Collector

힙 영역에 생성된 객체들 중에서 더이상 사용되지 않는 객체들을 탐색 후 제거하는 역할을 한다.
GC가 수행되는 시점을 정확히 알 수 없다. 또한 GC 수행동안 GC 수행 쓰레드를 제외한 모든 쓰레드가 일시정지된다.(장애 발생 여부)

Method 영역 Heap영역은 모든 쓰레드가 공유하지만
Stack Area, PC Register, Native Method Stack Area는 각 쓰레드마다 생성되고 공유되지 않는다.

반응형
Comments