코이팅

JVM(Java Virtual Machine)이란? 본문

JAVA

JVM(Java Virtual Machine)이란?

코이팅 2023. 1. 5. 16:46
728x90
반응형

JVM(Java Virtual Machine)?

JVM은 '자바를 실행하기 위한 가상기계' 입니다. 즉 컴퓨터를 사용해서 자바를 실행하기 위한 가상 기계입니다. JVM의 역할은 자바 Application을 클래스 로더를 통해 읽어서 자바 Application을 클래서 로더를 통해 읽어서 자바 API와 함께 실행하는 것입니다. 그리고 JVM은 Java와 OS사이에서 중개자 역할을 수행하며 Java가 OS에 구애받지 않고 재사용 가능하게 해줍니다.

 

JAVA 애플리케이션과 일반 애플리케이션의 비교

JVM의 특징?

  • Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경 없이 실행이 가능합니다.
  • 컴파일 된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환합니다.
  • 스택 기반의 가상 머신입니다.
  • 메모리 관리와 GC(Garbage Collector)를 수행합니다.
  • 일반 애플리케이션과 비교했을 때 JAVA 애플리케이션은 JVM을 한 번 더 거치고, 하드웨어에 맞게 완전히 컴파일 된 상태가 아니고 실행시에 해석되기 때문에 속도가 느립니다.

※ 요즘엔 바이트코드(컴파일 된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러향상된 최적화 기술이 적용되어서 속도의 격차를 많이 줄였습니다.

JVM의 구성?

JVM의 구조는 크게
Class Loader, Execution Engine, Runtime Data Area, Garbage Collector
로 나누어져 있습니다.

JVM (출처:위키피디아)

🟡 Class Loader (클래스 로더)

  • 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할을 합니다.

🟡 Execution Engine(실행 엔진)

  • .class 파일과 같은 ByteCode를 실행 가능하도록 해석합니다.

🟡 Runtime Data Area

  • 런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳입니다.
  • 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미합니다. (JAVA 메모리 공간)
  • Runtime Data Area는 Method Area, Heap, PC Registers, Java Stacks, Native Method Stacks로 나누어 집니다.
✔️ Method Area 
클래스 정보를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 영역입니다.

🔻 올라가는 정보 
▪️ Field Information
멤버 변수에 대한 정보 (이름, 타입, 접근 지정자 등)

▪️ Method Information
메서드에 대한 정보 (이름, 리턴 타입, 파라미터, 접근 지정자 등)

▪️ Type Information
Class 인지 Interface 인지 혹은 Type의 속성, 이름, super class의 이름 등. 또한 Method Area에는 상수형을 저장하고 중복을 막는 Runtime Constant Pool이 존재

✔️ Heap 
GC(가비지 컬렉션)의 대상이 되는 영역객체를 동적으로 생성하게 되면 인스턴스가 Heap 영역의 메모리에 할당된다.단, 레퍼런스 변수의 경우, Heap에 인스턴스가 저장되는 것이 아닌 포인터가 저장된다.

✔️ PC Registers
JVM은 스택 기반의 가상 머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아서 가져온다. 가져온 주소는PC Register에 저장된다.

✔️ Java Stacks 
호출된 메서드의 파라미터, 지역 변수, 리턴 값 및 연산 값 등이 저장되는 영역프로그램 실행 시 임시로 할당되었다가 메서드를 빠져나가게 되면 소멸되는 특성의 데이터들이 저장되는 영역메서드 호출 시마다 스택에 각각의 스택 프레임이 생성되고, 수행이 끝나면 스택 포인트에서 해당 프레임을 제거

✔️ Native Method Stacks
Java 이외의 언어에 제공되는 Method의 정보가 저장되는 공간 / Java Native Interface를 통해 바이트 코드로 저장Kernel이 자체적으로 Stack을 잡아 독자적으로 프로그램을 실행시키는 영역

 

🟡 Garbage Collector

  • 메모리 관리 기법 중 하나로, Heap 역역에 배치된 객체들을 관리하는 모듈입니다.

※ JAVA는 멀티 스레드 환경으로 모든 스레드는 Heap, Method Area를 공유합니다.

728x90
반응형

'JAVA' 카테고리의 다른 글

Java 자료형(Java Data Typ)  (0) 2023.01.11
자바(Java)란?  (0) 2023.01.05
Comments