본문 바로가기
공부용/JAVA

JVM (Java Virtual Machine)

by 엑스포스 2022. 11. 19.
반응형

 

 

JVM (Java Virtual Machine)

1. JVM 이란 무엇인가?

JVM(Java Virtual Machine) 이란 자바가상머신으로, 자바기반으로 만들어진 프로그램이 Window, Linux등 어느 운영체제에서도 실행될 수 있도록 해주는 프로그램이다.

2. JVM의 구조 & 실행과정

JVM 실행과정
  1. 프로그램 실행 시 OS로부터 필요한 메모리를 할당받은 후, 해당 메모리를 각 영역별 나누어 관리한다.
  2. Java Compiler는 .Java 확장자로 된 자바 소스 파일을 .Class 형식으로 컴파일 한다.
  3. 바이트 코드로 변환 된 파일을 Class Loader를 통해 Runtime Data Areas영역으로 로딩한다.
  4. 로딩된 Class파일은 Excution Engine을 통해 해석된다.
  5. 해석된 바이트코드는 Runtime Data Areas영역에서 실질적인 수행이 이루어진다.
  6. 위 실행과정속에서 JVM은 Garbage Collector(GC) 와 같은 관리작업을 수행한다.

3. JVM 상세

3.1 Java Compiler

  • .Java 확장자로 된 자바 소스 파일을 .Class 형식의 바이트 코드로 변환해주는 역할을 한다.

3.2 Class Loader

  • 바이트 코드로 변환된 .Class형식의 파일을 로드하고 Runtime Data Areas에 배치한다.

3.3 Excution Engine

  • 바이트 코드로 변환된 .Class형식의 파일을 기계어로 변환시키는 부분
  • 변환 방식에는 JIT와 Interpreter 방식이 있다.
    • Interpreter는 한 줄 씩 변환시켜서 사용하는 방식
    • JIT는 Interpreter의 단점(성능, 속도)를 보완하기 위해 만들어진 방식 전체 바이트 코드를 한 번에 변환시킨다.

3.4 Runtime Data Areas

  • 런타임 데이터 영역은 JVM이 운영체제에서 실행되면서 할당받는 메모리 영역으로, 5개의 영역으로 나뉘게 된다. 이 중 PC Register, JVM Stack, Native Method Stack쓰레드마다 하나씩 생성되며, Method AreaHeap모든 쓰레드가 공유한다.

3.4.1 Method Area

  • 모든 쓰레드가 공유하는 영역으로 JVM이 시작될 때 생성된다. JVM이 읽어들인 바이트코드가 이 영역에 저장됨
  • 클래스 정보, 변수 정보, static으로 선언한 변수가 저장됨

3.4.2 Heap

  • 동적으로 생성된 객체가 저장되는 영역 (New 연산으로 생성된 객체)
  • GC의 대상이 되는 공간
Person p = new Person("윤현중", 28);
// 위 처럼 선언했을 때 new Person("윤현중", 28)의 부분이 Heap에 저장됨!

3.4.3 JVM Stack

  • 지역변수나 메서드의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역
  • 해당 메서드의 호출이 종료되면 이 안에 선언된 변수들은 사라짐 > 주로 금방 사용되고 사용이 끝나는 데이터가 저장되는 영역
Person p = new Person("윤현중", 28);
// 위 처럼 선언했을 때 변수 p가 JVM Stack에 저장됨!

3.4.4 PC Register

  • 스레드가 시작될 때 생성되며, 현재 수행중인JVM의 명령어 주소를 저장하는 공간
  • 쓰레드가 어떤 부분을 어떤 명령어로 수행할지를 저장하는 공간

3.4.5 Native Method Stack

  • Java 언어가 아닌 다른 언어로 작성된 코드를 위한 공간

참고

Java, JVM 이란 - WanBLog | 개발블로그
자바 메모리 구조 뿌시기[ JVM이란? ] - 이정록

반응형

'공부용 > JAVA' 카테고리의 다른 글

Garbage Collection (GC)  (0) 2022.11.19
JAVA - 문자열 클래스  (0) 2022.11.19