| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- C#이론
- 스프링 스프링부트 차이점 공통점
- 스프링부트 장점
- spring spring boot 차이점 공통점
- 컴퓨터과학
- 프론트엔드
- java란 무엇인가
- 스프링부트의 장단점
- CS
- nosql
- 스프링부트회원가입
- 기술면접
- C# Blazor
- UaExpert download
- java란?
- opc-ua 다운로드
- 스프링부트로그인
- 스프링부트 단점
- cs기술면접
- Service Worker
- jvm구성요소
- Prosys Opc-ua 다운로드
- UaExpert다운로드
- REST API
- Blazor WebAssembly
- C# CS
- OPC-UA
- OPC-UA Download
- Blazor Web App
- prosys opc-ua
- Today
- Total
담비의 개발블로그
[CS]Java JVM 구조 본문
Java Virtual Machine(JVM)은 자바 바이트코드(.class 파일)를 실행하기 위한 가상 환경
구성요소
1. 클래스 로더 시스템
자바 컴파일러가 생성한 바이트코드를 읽어들여 메모리에 배치하는 역할을 한다.
로딩>링크>초기화 세 단계를 거친다.
로딩(Loading): 클래스 파일을 읽어 메모리에 올린다.
링크(Linking): 코드의 유효성을 검증하고 필요한 메모리를 미리 할당한다.
초기화(Initializaion): 클래스 변수들을 적절한 값으로 초기화 한다.
2. 런타임 데이터 영역
JVM이 운영체제로부터 할당받은 메모리 공간이다.
| 영역 | 특징 | 공유여부 |
| 메서드 영역 | 클래스 정보, 변수명, static 변수, 상수 등이 저장 | 모든 스레드 공유 |
| 힙 영역 | new 키워드로 생성된 객체와 배열이 저장 | 모든 스레드 공유 |
| 스택 영역 | 메서드 호출시마다 프레임이 쌓이며, 지역변수, 매개변수 등이 저장 | 스레드별 개별 소유 |
| PC 레지스터 | 현재 실행중인 JVM 명령의 주소를 기록 | 스레드별 개별 소유 |
| 네이티브 메서드 스택 | 자바 외의 언어로 작성된 코드를 실행하기 위한 메모리 | 스레드별 개별 소유 |
3. 실행엔진
메모리에 배치된 바이트코드를 실제로 실행하는 장치이다.
- 인터프리터 (Interpreter)
바이트코드를 한 줄씩 읽어서 해석하고 실행한다. 한 줄씩 실행하기 때문에 초기 실행 속도는 빠르지만, 전체적인 실행 속도는 느리다는 단점이 있다.
- JIT 컴파일러 (Just-In-Time Compiler)
인터프리터의 단점을 보완한다. 반복되는 코드(Hot Spot)를 발견하면 해당 전체 바이트코드를 네이티브 코드로 컴파일하여 직접 실행한다. 이후에는 컴파일된 코드를 바로 사용하므로 성능이 비약적으로 향상된다.
- 가비지 컬렉터 (Garbage Collector, GC)
Heap 영역에서 더 이상 참조되지 않는 객체들을 찾아 메모리에서 해제한다. 개발자가 직접 메모리를 해제할 필요가 없게 만들어주는 자바의 가장 큰 특징 중 하나이다.
4. 네이티브 메서드 인터페이스 & 라이브러리
자바 애플리케이션에서 C, C++ 등으로 작성된 라이브러리를 사용할 수 있게 해주는 통로이다. 하드웨어 제어나 성능 최적화가 필요한 특정 기능을 사용할 때 활용된다.
'CS(컴퓨터과학)' 카테고리의 다른 글
| [CS]2026.01.31 면접준비 (0) | 2026.02.01 |
|---|---|
| [CS]2026.01.30 면접준비 (0) | 2026.01.31 |
| 자바(Java)란 무엇인가? (0) | 2025.11.27 |
| [CS] 자바 메모리 영역&데이터 저장 방식(스택, 힙) (0) | 2025.10.21 |
| [CS] 원시타입 참조타입 (0) | 2025.10.21 |