[JAVA] JVM
1. JVM(Java Virtual Machine)이란?
- 자바가 OS에 종속받지 않고 실행할 수 있게 하는 가상 컴퓨터
- 스택 기반의 가상 머신
- 기본 자료형외의 모든 자료형들을 심볼릭 레퍼런스를 통해 참조
- 심볼릭 레퍼런스 : 참고하는 클래스의 특정 메모리 주소의 이름만 가지고 있는 것
- GC(Garbage Collection)을 통해 자원(메모리)을 관리
- → JVM을 이해하면 한정된 메모리를 효율적으로 사용하여 성능을 향상 시킬 수 있다.
2. 클래스 로더
- JVM 내로 클래스 파일(자바 바이트 코드,
*.class
)을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈- 자바 바이트 코드 : JVM이 이해할 수 있는 언어로 변환된 자바 소스코드
- 런타임시
jar
파일 내 저장된 클래스들을 JVM 위에 탑재
3. 실행 엔진
- 클래스를 실행시키는 역할
- 자바 바이트 코드를 명령어 단위로 읽어서 실행
- 인터프리터 방식
- 자바 바이트 코드를 명령어 단위 잃어서 실행
- 한 줄씩 실행 → JIT 보다 느림
- JIT(Just-In-Time) Compier
- 인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 네이티브 코드로 변경하고 네이티브 코드를 직접 실행
- 네이티브 코드는 캐시에 보관하기 때문에 속도가 빠름
- 자주 실행하는 코드일수록 JIT가 인터프리터 보다 유리
- 인터프리터 방식
4. Runtime Data Area
- JVM이 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 공간
- PC Register
- 각각의 Thread 별로 생기는 공간으로 현재 수행중인 JVM의 명령어 주소를 가지고 있음
- JVM stack
- 프로그램의 실행 과정에서 임시로 할당 되었다가 메소드가 빠져나가면 소멸 됨
- 메소드의 정보(매개 변수, 지역 변수 등)을 저장
- Native Method Stack
- 자바 언어로 작성된 네이티브 코드(기계어)를 위한 영역
- Method Area
- 클래스 정보를 처음 메모리 공간에 올릴 때, 초기화 되는 대상을 정하는 공간
- 모든 쓰레드가 공유(클래스, 인터페이스, 메소드, 필도, static 변수)
- Heap
- 객체를 저장하는 공간
new
연산자로 생성된 객체와 배열을 저장- GC의 관리 대상
5. 자바 프로그램 실행 과정
- 개발자가 자바 소스코드(
*.java
)를 작성 - 자바 컴파일러가 자바 소스 파일을 컴파일(
*.class
) - 컴파일된 바이트 코드를 JVMdml 클래스로더에 전달
- 클래스 로더는 동적 로딩을 통해 JVM의 메모리에 올림
- 실행엔진이 JVM에서 바이트 코드를 실행
※ 참고
'LANGUAGE > [JAVA]' 카테고리의 다른 글
[Java] JVM - 메모리 구조 (4) | 2023.02.28 |
---|---|
[Java] 롬복의 원리 (0) | 2022.06.08 |
정규식이란? (0) | 2022.04.05 |
Chapter11 컬렉션 프레임웍 Collections Framework (0) | 2021.08.28 |
Chapter10 날짜와 시간 & 형식화(date, time and formatting) (0) | 2021.08.27 |