rkd.log
로그인
rkd.log
로그인
JVM & 메모리 구조
강민수
·
2022년 11월 7일
팔로우
1
1
Java
목록 보기
1/9
JVM & 메모리 구조
What is JVM
JVM의 특징
시스템 메모리를 관리하고 Java 기반 애플리케이션을 위한 휴대용 실행 환경을 관리한다
다른 프로그램을 실행하는데 목적을 둔 프로그램이다
JVM의 기능
어느 장치나 OS에서도 자바 프로그램이 실행될 수 있게 한다
프로그램 메모리를 관리하고 최적화한다
자바 프로그램의 실행과정
프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
JVM은 이 메모리를 용도에 따라 여러 영역으로 나눠 관리한다.
자바 컴파일러가 자바 소스코드를 읽어들여 자바 바이트코드로 변환시킨다.
Class Loader를 통해 class파일들을 JVM으로 로딩한다.
로딩된 class 파일들은 Execution engine을 통해 해석된다.
해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.
JVM의 구성
Class Loader(클래스 로더)
JVM내로 클래스 파일들을 로드하고, 링크를 통해 배치하는 작업을 수행한다.
jar파일 내 저장된 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다.
컴파일 타임이 아니라 런타임에 참조한다.
Execution Engine(실행 엔진)
클래스를 실행시키는 역할
바이트코드를 실제로 JVM내부에서 기계가 실행할 수 있는 형태로 변환 (이때 2가지 방식을 사용한다)
Interpreter(인터프리터)
Execution Engine은 자바 바이트 코드를 명렁어 단위로 읽어서 실행한다.
한 줄 씩 수행하기 때문에 느리다는 단점이 있다.
JIT(Just-In-Time)
인터프리터의 단점을 보완하기 위해 도입된 컴파일러다.
인터프리터 방식으로 실행하다가 적절한 시점에 네이티브 코드로 변경하고, 이후에는 네이티브 코드로 직접 실행하는 방식
네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행한다.
내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을 때에만 수행한다.
Runtime Data Area
PC Register
Thread가 시작될 때 생성되며 나오는 공간으로 스레드마다 하나씩 존재한다.
현재 수행중인 JVM 명령의 주소를 갖는다.
JVM 스택 영역
프로그램 실행과정에서 임시로 할당되었다가 메서드를 빠져나가면 소멸되는 특정 데이터를 저장하기 위한 영역
각종 형태의 변수, 임시 데이터, 스레드, 메소드의 정보를 저장한다.
메서드 호출 시마다 각각의 스택 프레임이 생성된다.
메서드 수행이 끝나면 프레임 별로 삭제한다.
메서드 안에서 사용되는 값들을 저장한다.
Native method stack
실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
JAVA가 아닌 다른 언어로 작성된 코드를 위한 공간
이 부분을 통해 C code를 실행시켜 Kernel에 접근할 수 있다.
Method Area
클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간
Runtime Constant Pool은 상수 자료형을 저장하여 참조하고 중복을 막는 역할을 수행
올라가는 정보의 종류
Field Information
멤버변수의 이름, 데이터 타입, 접근 제어자에 대한 정보
Method Information
메서드의 이름, 리턴타입, 매개변수, 접근제어자에 대한 정보
강민수
능동적으로 개발 지식을 찾아다니는 백엔드 개발자입니다 😊 작성된 글에 대한 질문들 및 피드백은 언제나 환영입니다 :) 👌
팔로우
다음 포스트
체크 예외(Checked Exception vs Unchecked Exception)
0개의 댓글
댓글 작성