[JSCode 자바 스터디] 5주차(1) - JVM
📌 JVM
JVM 구조
- JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다.
- Java와 OS(운영체제) 사이에서 중개자 역할을 수행하여 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능하게 한다.
- 메모리 관리, Gc(가비지 컬렉션)을 수행한다.
👉 클래스 로더
런타임 중에 JVM의 메소드 영역에 동적으로 Java 클래스를 로드하는 역할을 합니다.
- JVM내로 .class에서 Byte Code를 읽고 메모리에 저장한다.
- 해당 Class Type의 Class 객체를 생성하여 힙 영역에 저장한다.(힙 영역은 모든 쓰레드에 공유)
- 클래스 로딩 : .class 파일을 읽어서 클래스 정보를 저장
- 클래스 링크 : 검증,
👉 Execute Engine
- . class파일과 같은 ByteCode를 실행 가능하도록 해석한다.
👉 JVM 메모리 영역
Method Area(메서드 영역)
- 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간이다. 이 공간에는 Runtime Constant Pool도 존재하며, 상수 자료형을 저장하고 참조하는 역할을 한다.
Heap(힙)
- 객체를 저장하는 가상 메모리 공간이다. new 연산자로 생성된 객체과 배열을 저장한다.
- 모든 스레드가 힙 영역을 공유한다.
- JVM의 GC(Garbage Collector)가 이 영역을 관리한다.
- Young/Old Generation:
Eden : 객체들이 최초로 생성되는 공간 Survivor 0/1 : Eden에서 참조되는 객체들이 저장되는 공간
- Old 영역 : Eden 영역에 객체가 꽉 차면 첫 번째 GC가 발생한다. Eden 영역에 있는 값들을 Survivor 1영역에 복사하고, 이 영역을 제외한 나머지 영역의 객체를 삭제한다.
Stack(스택)
- 프로그램 실행과정에서 임시로 할당되었다가 메소드를 빠져나가면 바로 소멸되는 특성의 데이터를 저장하기 위한 영역이다.
PC Register
- Thread가 시작될 때 생성되며 스레드마다 하나씩 존재한다.
- 현재 수행 중인 JVM 명령의 주소를 갖는다.
참고
- https://backendcode.tistory.com/161
- https://asfirstalways.tistory.com/158
This post is licensed under CC BY 4.0 by the author.