
JVM 구조JAVA2023. 1. 24. 21:03
Table of Contents
클래스 로더 시스템
.class 에서 바이트 코드를 읽고 메모리에 저장.
로딩: 클래스 읽어오는 과정
링크: 레퍼런스를 연결하는 과정
초기화: static 값들 초기화 및 변수에 할당
메모리
메소드 영역
메소드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드 ,변수) 저장. 공유 자원이다.
클래스의 필드, 메소드 정보, static 변수, 메소드와 생성자의 바이트코드, 각 클래스, 인터페이스에 관련된 런타임 상수풀이 저장
논리적으로 힙의 일부분이지만, 일반적으로 가바지 컬렉션 대상이 아니지만, JVM 벤더가 가비지 컬렉션 여부를 선택할 수 있다.
Method Area는 JVM 벤더마다 다르지만, HotSpot에선 Permanent Generation 이라고 불린다.
ava 8 부터는 HotSpot에서 JRockit과 일치시키는 과정으로 PermGen 영역을 삭제하고, Heap에interned String과 static 변수를 저장하도록 변경
Metaspace라는 새로운 네이티브 메모리 영역을 만들고 해당 영역에 클래스 메타데이터를 저장
힙 영역
힙 영역에는 객체를 저장. 공유 자원이다. 클래스의 인스턴스와 배열이 할당되는 영역. 할당된 객체는 직접 해제가 불가능하며, 오직 가비지 컬렉터에 의해 해제 됨.
가비지 컬렉터가 사용할 수 있는 것보다 많은 Heap이 필요하면 OutOfMemoryError가 발생
스택 영역
스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다.
스택 프레임은 로컬 변수, 일부 실행결과, 메소드 호출 또는 반환 등을 저장. Frame을 push(저장)하거나 pop(제거) 하는 동작만 수행.
쓰레드가 허락된 스택 용량보다 많은 계산을 필요로 하면 StackOverflowError가 발생.
실행중인 쓰레드의 스택을 확장할 만큼 충분한 메모리가 없거나, 새로 생성될 쓰레드에게 메모리가 부족해 스택을 할당할 수 없는 경우 OutOfMemoryError가 발생.
Pc레지스터
PC(Program counter)레지스터 : 쓰레드 마다 쓰레드 내 현재 실행할 instruction의 위치를 가리키는 포인터가 생성된다.
네이티브 메소드 스택
자바 이외의 언어(C, C++, 어셈블리 등)로 작성된 코드를 실행할 때, Native Method Stack이 할당되며, 일반적인 C스택을 사용한다.
JVM Stacks과 동일한 기준으로 StackOverflowError와 OutOfMemoryError가 발생
'JAVA' 카테고리의 다른 글
JVM (0) | 2023.01.24 |
---|---|
자바 프로그래밍 시작하기 (0) | 2023.01.24 |

@Zezi :: Dean's 개발 사이트
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!