본문 바로가기
won2dev-log
HomeArchiveTagsCategoriesAboutProjects
HomeArchiveTagsCategoriesAboutProjects
won2dev-logwon2dev-logwon2dev-log

비전공 개발자의 로그 | won2dev-log

Navigation
  • Home
  • Archive
  • About
  • Projects
Categories
  • Docs
  • TIL
  • Automation
  • Git · GitHub
  • Project
Tags
  • TIL
  • Java
  • Spring
  • Backend
  • n8n
더보기
About

기록을 거름 삼아 공유는 성장을 만든다.

LicensePrivacy
© won2dev 2026. All rights reserved.
Home›Docs›TIL - Java 기초: JVM 메모리 구조 이해하기
Docs

TIL - Java 기초: JVM 메모리 구조 이해하기

won2dev·2025년 03월 10일
#Java#TIL
TIL - Java 기초: JVM 메모리 구조 이해하기
⚠️ 이 글은 저작권 이슈로 인해 일부 내용이 수정 또는 제거되었습니다.

💬 배운 기술 / 지식

  • JVM의 역할
  • 메모리 영역: 메서드 영역, 힙, 스택, PC 레지스터, 네이티브 메서드 스택
  • 객체 저장 위치
  • 메모리 흐름과 GC(Garbage Collection)

🧠 JVM이란?

  • Java Virtual Machine
  • 자바 바이트코드를 OS와 무관하게 실행시켜주는 가상 머신
  • 자바 프로그램의 실행을 담당하며, 메모리 관리, GC, 런타임 실행 환경 제공

🧩 JVM 메모리 영역

📦 1. 메서드 영역 (Method Area)

  • 클래스 정보, static 변수, 상수, 메서드 코드 저장
  • 모든 스레드가 공유함
  • 정적 데이터 저장소 역할

🧺 2. 힙 영역 (Heap)

  • new로 생성한 객체와 배열 저장
  • GC의 대상이 되는 공간
  • 모든 스레드가 공유하는 공간

📄 3. 스택 영역 (Stack)

  • 각 스레드마다 개별로 존재
  • 메서드 호출 시 생기는 지역 변수 저장
  • 메서드 실행이 끝나면 자동으로 제거됨 (LIFO 구조)

🎯 4. PC 레지스터

  • 현재 실행 중인 명령어 주소 저장
  • 스레드마다 개별로 존재
  • JVM이 다음에 실행할 명령어 판단

🛠 5. 네이티브 메서드 스택

  • 자바가 아닌 네이티브 코드(C, C++ 등) 실행 시 사용
  • JNI(Java Native Interface) 호출 시 필요

🔄 객체 저장 위치와 흐름

  • 객체는 힙(Heap) 에 저장됨
  • 지역 변수는 스택(Stack) 에 저장되며, 객체 주소(참조값)를 가짐
  • 메서드 실행 시마다 스택 프레임 생성 → 종료 시 제거
  • GC는 힙 영역의 불필요한 객체를 찾아 자동으로 제거

💡 느낀 점 / 참고 사항

  • JVM 구조를 이해하면 메모리 오류나 성능 병목을 분석하는 데 큰 도움이 됨
  • GC가 모든 걸 해결해주진 않음 → 객체 생명주기와 참조 해제 관리 중요
  • 스택은 작고 빠르지만 임시적, 힙은 크고 유연하지만 GC 대상이 됨
  • 멀티스레드 환경에서는 스택은 분리되지만 힙은 공유됨 → 동기화 고려 필요
공유하기
이전 글TIL - Java 기초: 기본형과 래퍼 클래스 정리다음 글 TIL - Java 기초: 클래스와 객체

목차

  • 💬 배운 기술 / 지식
  • 🧠 JVM이란?
  • 🧩 JVM 메모리 영역
  • 📦 1. 메서드 영역 (Method Area)
  • 🧺 2. 힙 영역 (Heap)
  • 📄 3. 스택 영역 (Stack)
  • 🎯 4. PC 레지스터
  • 🛠 5. 네이티브 메서드 스택
  • 🔄 객체 저장 위치와 흐름
  • 💡 느낀 점 / 참고 사항

카테고리

Docs

태그

#Java#TIL

최근 글

Git 요약 (1) - Rebase, Stash, Squash MergeTIL - MSA 핵심 요소 정리TIL - (4) Spring 어노테이션 정리: Mockito를 활용한 단위 테스트TIL - (3) Spring 어노테이션 정리: Lombok Getter, Setter와 생성자TIL - (2) Spring MVC와 WebFlux의 차이: 블로킹과 논블로킹