본문 바로가기
JAVA

JVM(Java Virtual Machine)

by Lalabla 2020. 1. 28.
반응형

정의

자바 바이트 코드를 실행할 수 있는 주체. 인터프리터, JIT 컴파일 방식으로 다른 컴퓨터 위에 바이트 코드를 실행할 수 있도록 구현. 

인터프리터

명령어를 한줄씩 읽어들여 실행.

JIT(Just-in-time) 컴파일

프로그램을 실제로 실행하는 시점에 기계어로 번역하는 컴파일 기법. 

자바 컴파일러가 자바 프로그램 코드를 바이트 코드로 변환한 다음, 실제 바이트 코드를 실행하는 시점에서 자바 가상머신이 바이트 코드를 JIT 컴파일을 통해 기계어로 변환. 

   

상세 설명

Class Loader

자바 클래스를 자바 가상 머신(JVM)으로 동적 로드하는 자바 런타임 환경(JRE)의 일부.

라이브러리를 위치시키고 내용물을 읽으며 라이브러리들 안에 포함된 클래스들을 읽는 역할을 함.

JVM이 시작되면 3개의 클래스 로더들이 사용됨.

1. 부트 스트랩 클래스 로더 : <JAVA_HOME>/jre/lib 디렉터리에 위치한 핵심 자바 라이브러리 load.

2. 확장 클래스 로더 : <JAVA_HOME>/jre/lib/ext 또는 java.ext.dirs 시스템 속성에 지정된 기타 디렉터리 load.

3. 시스템 클래스 로더 : java.class.path에서 볼 수 있음. CLASSPATH 환경 변수에 매핑.

 

Execution Engine

Class Loader에 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 함.

이 때 위에서 설명한 인터프리터 방식 혹은 JIT 컴파일러를 이용함.

 

GC(Garbage Collector)

동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능.

프로그래머가 직접 구현했을때 발생했던 문제점(이미 해제된 메모리에 접근하는 경우, 이미 해제된 메모리를 또다시 해제 하는 경우, 필요하지 않은 메모리가 해제되지 않고 남아있는 경우(메모리 누수)등 )을 줄이거나, 완전히 막을 수 있음. 

그러나 쓰레기 수집이 일어나는 타이밍이나 점유시간을 미리 예측하기 어렵고, 할당된 메모리가 해제되는 시점을 알수 없는 단점이 있음. 

 

 

JVM Memory 영역 설명

JVM이 운영체제 위에서 힐행되면서 할당받는 메모리 영역으로 총 6개의 영역으로 나눌 수 있음. 

PC register, JVM Stack, Native Method Stack은 쓰레드 마다 하나씩 생성되고, Heap, Method Area, Runtime Constant Pool은 모든 쓰레드가 공유해서 사용됨.

Method Area

JVM이 시작될 때 생성되는 공간으로 필드 정보(클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보), 메소드 정보(메소드의 이름, 리턴타입, 파라미터, 접근제어자), static 변수, final class 변수 등이 생성됨.

JAVA는 클래스를 로드할 때 미리 모든 정보를 로드하는 것이 아니라 런타임으로 로드를 하기 때문에 특정 클래스가 참조 될 때 Method Area에 해당 클래스 정보가 없을 때, 해당 클래스 정보를 로드하고 객체 생성 후 Heap에 적재함.

Heap Area

new 키워드로 생성된 객체와 배열이 생성되는 영역으로 GC 대상이 되며, 성능 이슈를 일으키는 공간.

JVM Language Stack

지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값이 생성되는 영역으로 힙 영역의 주소값을 가지고 있음. 각 쓰레드마다 하나씩 존재하며, 쓰레드가 시작될 때 생성됨. 쓰레드의 수행 정보를 기록하는 Frame을 저장하는 메모리 영역. push, pop 동작 만 수행. 

PC Registers

각 쓰레드마다 하나씩 존재하며 쓰레드가 시작될 때 생성됨. 현재 수행중인 JVM 명령의 주소를 가지고 있음.

Native Method Stack

모든 쓰레드 들이 공유하는 메모리 영역. load된 type(class, interface)을 저장하는 논리적 메모리 공간.

 

참조

 

JVM 구조와 자바 런타임 메모리 구조 (자바 애플리케이션이 실행될 때 JVM에서 일어나는 일, 과정을 설명해줄 수 있나요?)

JVM(Java Virtual Machine) : 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 즉, 운영체제 위에서 동작하는 프로세스로 자바 코드를..

jeong-pro.tistory.com

 

 

Java virtual machine - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Overview of a Java virtual machine (JVM) architecture based on The Java Virtual Machine Specification Java SE 7 Edition A Java virtual machine (JVM) is a virtual machine that enables a

en.wikipedia.org

 

 

JVM memory 와 GC 종류 - 자바와 웹 프로그래밍 - SLiPP::위키

페이지 Home 자바 메모리 분석 배너의 맨 끝으로 배너의 맨 처음으로 JVM memory 와 GC 종류 메타 데이터의 끝으로 건너뛰기 작성자 : 김문수 - 2017년 07월 06일 메타 데이터의 시작으로 이동 구조class loader컴파일된 자바 바이트 코드를 런타임 데이터 영역에 로드execution engine런타임 데이터 영역에 로드된 자바 바이트 코드 실행.runtime data areas런타임 데이터 영역은 JVM에게 할당받는 메모리 영역으로

www.slipp.net

 

 

[JAVA/JVM] 메모리 구조 (부제 : 성능개선을 위한 GC의 활용)

이번엔 JAVA의 JVM(메모리) 구조 (부제 : 성능개선을 위한 GC의 활용) 에 대해 알아 보겠습니다. JVM이란 무엇인지 대해 알아본후 JVM과 .EXE의 파일을 비교하여 JVM의 실행구조, 수행과정, Runtime Data Areas,..

stophyun.tistory.com

 

반응형

'JAVA' 카테고리의 다른 글

String 타입(== 비교, equal 비교)  (0) 2020.02.05
Java Intro.  (0) 2020.02.04
이클립스 중요 단축키  (0) 2020.01.17
Interface VS Abstract Class  (0) 2020.01.13
변수(클래스, 인스턴스, 지역, final)  (0) 2020.01.13

댓글