memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

JVM

Java Virtual Machine의 약자.

Java 프로그램이 플랫폼에 의존하지 않고, 어디서든 동작 가능하도록 하기 위한 Java 가상 머신이다.

  • 단, Java 프로그램은 JVM 위에서 동작하기 때문에, JVM에 의존성을 가짐

 

C/C++ 언어는 CPU 아키텍처, 운영체제 등 플랫폼 환경에 의존성을 가지기 때문에, 플랫폼이 바뀌면 제대로 동작하지 않는 문제가 있음 (크로스 컴파일을 통해, 타겟 플랫폼에 맞춰서 컴파일을 해줘야 함)

  • Java의 경우 이러한 문제를 해결하기 위해 JVM을 만들었음

 

JVM 아키텍처

JVM은 아래와 같이 크게 Class Loader, Runtime Data Area(JVM 메모리), Execution Engine 으로 나눠짐

출처: https://www.sitesbay.com/java/java-jvm-architecture

 

Class Loader

Java 바이트 코드(.class 파일)를 Runtime Memory Area에 적재(load)하는 역할을 함

 

Runtime Memory Area

사실 이부분이 제일 중요하다고 보는데, JVM 메모리를 Runtime Memory Area라고 부름

 

Runtime Data Area (JVM 메모리)

Runtime Memory Area는 5가지 영역으로 나눠짐

  • Method Area: 클래스 데이터, static 변수가 저장되는 공간
  • Heap Area: (new 연산자를 통해) 동적으로 생성되는 객체가 저장되는 공간
  • Stack: 프레임(Frame)이 저장되는 공간
    • Frame: 메소드 데이터가 저장되는 공간 (메소드 파라미터, 지역변수, 참조 주소값 등)
  • PC Register: JVM이 현재 실행한 명령어의 주소를 저장
  • Native Method Area: Java 바이트코드가 아닌 C/C++ 언어가 실행되기 위해 필요한 공간 (성능 향상을 위해 C/C++을 사용하는 경우가 있음)

 

자세한 내용은 아래 참고

2021/03/07 - [Language/JAVA] - JVM 메모리 (Runtime Data Area)

 

JVM 메모리 (Runtime Data Area)

Runtime Data Area JVM 메모리를 뜻함 Runtime Data Area 는 5개 영역으로 나눠짐 Method Area , Heap , Stack , PC Register , Native Method Area Method Area 와 Heap 은 모든 스레드가 공유하는 공간 Stack ,..

memostack.tistory.com

 

Execution Engine

Method Area의 바이트 코드를 Execution Engine에 제공하여 바이트 코드를 실행함.

  • 쉽게 바이트 코드를 실행하는 엔진이라고 할 수 있음

 

Execution Engine이 실행하는 방식에는 2가지가 있음

  • Interpreter 방식
    • 인터프리터 방식은 바이트 코드를 한 줄씩 해석하고 실행함. 하지만 속도가 느리다는 단점이 있음
  • JIT 방식
    • Just In Time 의 약자로, 기존 인터프리터 방식의 느리다는 단점을 극복하기 위한 방법
    • 컴파일 방식과 인터프리터 방식을 혼합한 방식을 이용함
    • 명령어 한 줄을 컴파일 하여 기계어(Native Code)로 변환하여 실행함
    • 또한, 캐싱 기능이 있어서 똑같은 명령어의 경우는 캐싱하여 바로 실행함
반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!