(3) JVM

Chaeyun·2024년 1월 26일
0

Java

목록 보기
3/6

JVM(Java Virtual Machine)이란?

OS와 자바 기반 애플리케이션 사이의 매개체 역할을 하는 일종의 가상 서버로, 애플리케이션은 JVM 위에서 동작하도록 설계되어 있다.
이는 OS 환경과 무관하게 애플리케이션이 항상 동일하게 동작하는 것을 보장할 수 있다.

JVM의 단점은?

  1. 자바 애플리케이션을 실행하기 위해서는 반드시 JVM을 구동해야 하는데 JVM은 컴퓨터의 메모리와 CPU 사용량을 차지한다.

  2. C 혹은 C++과 다르게 시스템 함수를 바로 사용할 수 없고 JNI(Java Native Interface)를 통해 JVM을 한번 더 거쳐야 시스템 자원에 접근할 수 있다.

    *JNI : 자바 프로그램에서 해당 플랫폼에서만 실행 가능한 네이티브 코드에 접근하기 위해 만들어진 API

JVM의 구조에 대해 설명해보시오.

크게 Class Loader Subsytem, Runtime Data Area, Execution engine으로 나뉘며 Runtime Data Area에는 메소드, 스택, 힙, PC 레지스터, 네이티브 메소드 영역이 존재한다.

사진 출처: https://coding-start.tistory.com/205

자바 파일(.java)을 컴파일하면 바이트 코드인 클래스 파일(.class)이 된다.
그리고 해당 클래스 파일을 실행하면 JVM은 클래스 로더로 해당 파일을 읽어들인다.
클래스 로더는 클래스 파일의 정보를 메모리에 올리고 검증, 초기화 등의 작업을 처리한다.

Runtime Data Area는 JVM이라는 가상머신이 사용하는 메모리 공간이다.

실행 데이터 영역의 각 영역은 다음과 같은 역할을 한다.

  1. 메소드 영역
    클래스 로더에 의해 로딩된 클래스가 저장되는 곳이다. 클래스의 메타 정보인 메소드, 클래스 변수 등이 있다.
  2. 힙 영역
    클래스가 실행될 때 생성된 인스턴스와 객체가 저장되는 구역이다. 동적으로 데이터가 생성되고 소멸되며, 가비지 컬렉터가 동작하는 영역이다. 크게 Young, Old, Permananent 영역으로 나뉘어 있다.
    Young 영역은 프로그램 내부에 새롭게 생긴 데이터가 저장되는 부분이고, Young 영역
  3. 스택 영역
    호출된 메소드 정보가 저장되는 곳이다. 매개변수, 지역 변수, 복귀 주소 등의 메소드 정보를 저장하고 메소드 실행이 끝나면 저장된 정보는 삭제된다. LIFO 방식으로 동작한다.
  4. PC Register
    CPU의 Register와 역할이 비슷하다. 현재 JVM이 수행 중인 명령어 주소값이 저장된다.
  5. Native Method Stack
    네이티브 메소드란 OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드로 보통 C, C++로 작성한다. 이러한 네이티브 메소드의 매개변수나 지역 변수등을 저장하는 영역이다. 자바 프로그램에서는 JNI API를 사용해 OS 시스템에 접근 가능하며 이 때 사용되는 네이티브 메소드들의 정보가 여기에 저장된다.

위에서 메소드와 힙 영역은 모든 스레드가 공유하는 공간이고, 스택과 레지스터, 네이티브 메소드 영역은 각 스레드마다 개별로 생성하는 공간이다. 따라서 메소드와 힙 영역은 멀티 스레드에서 동기화에 주의해야 하는 영역이다.

References

0개의 댓글

관련 채용 정보