9osari.log
← 목록으로

[JVM] 메모리 구조와 객체 흐름

2026년 2월 5일 · #java#jvm

도입

남한테 설명할 줄 알아야 진짜 공부가 된거다. JVM에 대해 한번 공부했지만 기억에 남는건 별로 없었다. 이제부턴 모르는 사람에게 이 개념을 설명한다 상상하고 혼자 설명하며 공부해보려한다.. JVM의 역할과 RunTime Data Area 구조, 그리고 객체가 생성되고 GC로 정리되기까지의 흐름을 남겨보겠다.

JVM 이란?

JVM 구조도 JVM 요약도

JVM은 자바 바이트 코드를 실행해주는 가상 머신이다. 운영체제마다 JVM 구현체가 존재하기 때문에, 자바 프로그램은 운영체제에 독립적 이다. 또한 메모리 관리와 GC를 담당한다는 점에서 단순 실행기 이상의 역할을 가진다.

RunTime Data Area

메모리 구조 JVM 메모리 구조

JVM 메모리는 크게 Method Area(클래스 정보), Heap, Stack으로 구성된다.

보통 자바 메모리 구조 = RunTime Data Area 를 의미

간단한 흐름

public void main() {
    User user = new User();
    call(user);
}

public void call(User user) {
    user.setName("kim");
}

간단한 코드로 흐름을 봐보자.

  1. 메인 메서드가 호출되면 스택에 main 프레임이 생성
  2. new User() 로 생성된 객체는 힙에 올라가고, user 변수에는 객체의 참조값 저장
  3. call 메서드가 호출되면 새로운 스택 프레임이 생성, user 참조값이 복사되어 전달 (이 때문에 call 메서드 내부에서 객체 필드를 변경하면 호출자도 동일한 객체가 변경)
  4. 메서드가 종료되면 스택 프레임 제거
  5. 참조가 끊긴 객체 인스턴스는 GC에 의해 제거

변수의 저장 위치

변수 종류저장 위치설명
static 변수메서드 영역클래스 로딩 시 1번만 생성, 인스턴스 공유
인스턴스 변수(클래스의 맴버)Heap 영역객체 생성 시마다 생성
지역 변수Stack 영역메서드 호출 시 생성, 종료 시 제거

기억해야 할 것

자바는 항상 값 복사 방식으로 전달되며, 객체의 경우 참조값이 복사

객체와 인스턴스 둘은 같은 의미지만, 클래스와의 관계를 강조할 때 “인스턴스”라는 표현을 사용한다.

···
← PREV [Thread] 생산자-소비자 패턴 NEXT → [리팩토링] 복잡한 승인 로직, SRP와 DRY 원칙으로 통합하기