배너 이미지

JVM과 힙, 스택

2025. 4. 21. 20:15·CS공부/Java & Spring

자바 애플리케이션의 실행 환경인 JVM(Java Virtual Machine)의 구조와,
JVM 내부에서 메모리가 어떻게 구성되고 관리되는지를 중심으로 정리하였다.
특히 힙(Heap)과 스택(Stack)의 차이와 역할, 그리고 개발자가 주의해야 할 메모리 관리 포인트를 함께 다루었다.


1. JVM이란?

JVM은 자바 바이트코드(.class)를 실행하는 가상의 머신으로,
플랫폼에 독립적인 자바 실행 환경을 제공한다.
JVM은 다음과 같은 주요 구성 요소로 이루어져 있다:

구성 요소 설명
Class Loader 클래스(.class) 파일을 메모리로 로딩
Execution Engine 바이트코드를 해석 또는 JIT 컴파일 후 실행
Garbage Collector 불필요한 객체를 탐지하고 메모리 회수
Runtime Data Area 메모리 구조(Heap, Stack 등)를 담당

2. JVM 메모리 구조

JVM의 메모리 영역은 크게 아래와 같이 나뉜다:

영역 설명
Method Area 클래스 정보, static 변수, 메서드 코드 저장
Heap 객체(instance) 저장, GC의 대상
Stack 스레드별 프레임(stack frame) 저장 (메서드 호출, 지역 변수 등)
PC Register 현재 실행 중인 명령어 주소 저장
Native Method Stack C 등 네이티브 코드 실행용 스택

3. 힙(Heap) 영역

  • 모든 new 키워드로 생성된 객체는 Heap에 저장된다.
  • GC(Garbage Collector)의 관리 대상이 된다.
  • 영역은 다음과 같이 분리되어 있다:
Young Generation (Eden + Survivor)
→ 객체가 처음 생성되는 영역, Minor GC 발생

Old Generation
→ 오래 살아남은 객체가 이동, Major GC 발생

객체의 생애 주기를 따라 점점 Old 영역으로 이동하는 구조를 Generational GC라고 한다.


4. 스택(Stack) 영역

  • 스레드마다 독립적인 Stack 공간을 가진다.
  • 하나의 메서드가 호출될 때마다 Stack Frame이 생성되며, 메서드 종료 시 제거된다.
  • 프레임에는 지역 변수, 매개변수, 반환 주소 등이 포함된다.

특징

  • LIFO(Last In First Out) 구조
  • 스레드 간 공유되지 않기 때문에 동기화 이슈가 없다
  • 크기가 제한되어 있으며, 재귀 등으로 과도하게 사용 시 StackOverflowError 발생

5. 개발자가 주의할 메모리 포인트

  • 객체를 과도하게 생성하거나, GC가 회수하지 못하도록 참조를 유지하면 메모리 누수 발생 가능
  • static 변수는 Method Area에 상주하며 애플리케이션 종료 전까지 유지된다
  • Stack은 빠르지만 용량 제한이 있으므로 재귀 깊이에 주의가 필요하다
  • JVM 튜닝 시 -Xmx, -Xms, -Xss 옵션 등을 통해 영역별 크기 조정 가능

학습 정리

JVM은 자바 애플리케이션의 실행을 담당하는 핵심 컴포넌트로,
힙과 스택은 각각 객체와 실행 흐름을 담당하는 중요한 메모리 구조이다.
이 구조를 이해하면 성능 문제 분석, 메모리 튜닝, 오류 디버깅 등에 있어 큰 도움이 된다.

'CS공부 > Java & Spring' 카테고리의 다른 글

Spring 내부 구조 - DispatcherServlet, 요청 흐름, 에러 처리  (0) 2025.04.22
Spring Boot @Transactional 어노테이션  (0) 2025.04.22
Spring Boot 프로젝트 horong 리팩토링  (1) 2025.04.22
힙 메모리 누수  (0) 2025.04.22
가비지 컬렉션(Garbage Collection)  (0) 2025.04.21
'CS공부/Java & Spring' 카테고리의 다른 글
  • Spring Boot @Transactional 어노테이션
  • Spring Boot 프로젝트 horong 리팩토링
  • 힙 메모리 누수
  • 가비지 컬렉션(Garbage Collection)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바