공부용/JAVA

JVM (Java Virtual Machine)

엑스포스 2022. 11. 19. 09:56
반응형

 

 

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이란? ] - 이정록

반응형