일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- gcp
- Spring Boot
- 클라우드
- Kafka
- 프로그래밍문제
- 카프카
- VPC
- Spring Data JPA
- springboot
- 월미도
- Elasticsearch
- 클라우드 컴퓨팅
- aws
- 백트래킹
- 코드업
- 스프링
- 스프링부트
- Docker
- JPA
- 알고리즘
- Spring
- 로드밸런서
- Apache Kafka
- 쿠버네티스
- 자료구조
- DFS
- 백준
- 개발자
- 스프링 부트
- 오일러프로젝트
- Today
- Total
GW LABS
JVM 완벽 가이드: JVM 구조, JVM 역할, 동작 원리 총정리 본문
JVM 완벽 가이드: JVM 구조, JVM 역할, 동작 원리 총정리
서론
Java Virtual Machine(JVM)은 자바(Java)뿐 아니라 Kotlin, Scala 등 다양한 JVM 기반 언어의 실행을 책임지는 핵심 플랫폼입니다.
많은 개발자가 "JVM은 자바 코드를 실행하는 프로그램"이라고 알고 있지만, JVM의 역할은 그 이상입니다.
JVM 구조, JVM 역할, 그리고 C와 같은 언매니지드 언어와의 차이를 이해하면, 플랫폼 독립적인 애플리케이션 개발의 기반을 마련할 수 있습니다.
이번 글에서는 다음을 다룹니다:
- JVM의 기본 개념과 역사
- JVM과 C 같은 언매니지드 프로그래밍의 차이
- JVM 기반 언어의 컴파일부터 런타임까지 동작 과정
1. JVM의 기본 개념과 역사
JVM(Java Virtual Machine)은 바이트코드(Bytecode)를 실행하기 위한 가상 머신입니다.
자바 소스 코드는 직접 OS에서 실행되지 않고, 먼저 바이트코드로 컴파일된 후 JVM 위에서 동작합니다.
JVM의 역사
- 1995년 Sun Microsystems가 자바와 함께 JVM을 발표
- 철학: "Write Once, Run Anywhere" (한 번 작성하면 어디서든 실행)
- 현재는 OpenJDK, HotSpot, GraalVM 등 다양한 구현체 존재
핵심 요약: JVM은 하드웨어와 OS를 추상화하여, 플랫폼 독립적인 애플리케이션 실행 환경을 제공합니다.
2. JVM과 C 같은 언매니지드 언어의 차이
C, C++ 같은 언매니지드 언어는 메모리 관리와 하드웨어 접근을 개발자가 직접 제어합니다.
반면 JVM 기반 언어는 Garbage Collection(GC), 보안, 스레드 관리 등을 JVM이 담당합니다.
구분 | JVM 기반 언어(Java, Kotlin 등) | 언매니지드 언어(C, C++) |
---|---|---|
메모리 관리 | GC 자동 관리 | malloc , free 직접 호출 |
실행 방식 | 바이트코드 → JVM → OS | 기계어 직접 실행 |
보안성 | JVM Sandbox 보안 | OS/하드웨어 직접 접근 |
이식성 | 높음(플랫폼 독립) | 낮음(OS 종속) |
C 예제 (메모리 직접 관리)
#include <stdio.h>
#include <stdlib.h>
int main() {
int* arr = (int*)malloc(sizeof(int) * 5);
if (arr == NULL) return 1;
arr[0] = 10;
printf("%d\n", arr[0]);
free(arr);
return 0;
}
JVM 기반 언어 예제 (자동 메모리 관리)
public class Main {
public static void main(String[] args) {
int[] arr = new int[5]; // JVM이 메모리 관리
arr[0] = 10;
System.out.println(arr[0]);
}
}
3. JVM 구조와 동작 원리
JVM은 단순한 인터프리터가 아니라 클래스 로더, 실행 엔진, GC로 구성된 복합 시스템입니다.
JVM 동작 과정
- 컴파일 단계
- .java → javac → .class(바이트코드)
- 클래스 로딩(Class Loader)
- 바이트코드를 메모리에 로드
- 바이트코드 검증(Verifier)
- 무결성, 보안성 검증
- 실행 엔진(Execution Engine)
- 인터프리터: 바이트코드를 한 줄씩 실행
- JIT(Just-In-Time): 자주 실행되는 코드(Hot Spot)를 기계어로 변환
- Garbage Collector
- 사용되지 않는 객체 메모리 자동 회수
JVM 실행 흐름 예시
소스코드 (.java)
↓ javac
바이트코드 (.class)
↓ JVM Class Loader
메모리 로드
↓ Execution Engine (Interpreter / JIT)
실행 (OS 호출)
결론
JVM은 단순한 자바 실행기 이상으로, 다양한 언어의 실행 기반이자 플랫폼 독립성을 보장하는 핵심 기술입니다.
언매니지드 언어보다 안전성과 생산성이 높으며, GC, 보안, 스레드 관리까지 JVM이 제공하므로 개발자는 비즈니스 로직에 집중할 수 있습니다.
요약: JVM 구조와 역할을 깊이 이해하면, 더 안정적이고 이식성 높은 애플리케이션을 설계할 수 있습니다.
한 문장 가치: JVM은 모든 JVM 기반 언어 개발자의 필수 지식입니다.
'Programming > Java' 카테고리의 다른 글
Spring Batch 사용법: 대용량 데이터 처리를 위한 실무 가이드 (3) | 2025.08.16 |
---|---|
Spring Kafka 완벽 가이드: KafkaTemplate와 @KafkaListener, 재시도 및 Dead Letter Queue 활용법 (1) | 2025.08.15 |
Spring의 기본 개념 총정리: DI, IoC, AOP 완벽 가이드 (0) | 2025.08.12 |
Spring Boot Multi-threaded JDBCTemplate (0) | 2021.12.15 |
Spring Boot Multi DataSource (3) | 2021.12.14 |