본문 바로가기

[Java] JVM을 좀 배워야지 C++ 같은거 안하지

@Salieri2026. 2. 5. 10:58

Pointer 개념하고 Referencing 개념은 아는데 RAM 관리는 뭔지 잘 모르는 사람들을 위해서 빠르게 JVM 을 정리한 글

앵  Java 그냥 C# 이랑 비슷하게 작동하는거 아니냐? 그거 그냥 뭐 코드 쓰니까 되던데,

그냥 다 넣고 compose 하니까 따단 ! 되던데? 안되면 cursor always on 키고 "해줘" 하면 AI 가 다 하던데? 

 


 

 

 

[Java] 자바 메모리 관리의 핵심: Stack vs Heap 완벽 정리

 훌륭한 자바 개발자라면 면접 단골 질문이자 애플리케이션 성능 최적화의 핵심인 "자바 메모리 구조'"에 대해 명확히 이해하고 있어야 합니다. 오늘은 자바 메모리가 어떻게 동작하는지, 그리고 가장 중요한 두 영역인 "Stack(스택)"과 "Heap(힙)"의 차이점에 대해 정리를 아주 빠르게 정리할려고 한다.

 

 

 


1. 자바 메모리(Java Memory)란?

 자바 메모리는 간단히 말해 자바 애플리케이션이 실행되는 동안 필요한 데이터를 저장하는 공간입니다.

우리가 코드를 작성하고 실행하면, 컴퓨터는 이 프로그램이 돌아가는 데 필요한 변수, 객체, 메서드 등을 저장할 공간이 필요합니다. 이 역할을 하는 것이 바로 자바 메모리이다

 

 

 

 

JVM(Java Virtual Machine)의 역할

자바 메모리는 운영체제로부터 직접 관리받는 것이 아니라 JVM에 의해 관리됩니다.

  • 할당(Allocate): 애플리케이션이 필요로 하는 메모리 공간을 확보합니다.
  • 해제(Deallocate): 더 이상 필요 없는 메모리를 정리합니다. 이 과정에서 그 유명한 Garbage Collection(GC)이 일어난다

 

 

핵심 요약: JVM은 메모리를 할당하고 해제(Garbage Collection)하는 총괄 관리자 역할을 수행합니다.

 

 

 

 

 

2. Stack vs Heap: 무엇이 다른가?

자바 메모리는 크게 여러 영역으로 나뉘지만, 개발자가 가장 신경 써야 할 두 가지 영역은 바로 StackHeap입니다. 이 둘은 저장하는 데이터의 종류와 생명 주기가 완전히 다르다. 

📍 Stack Memory (스택 메모리)

스택은 메서드 호출과 관계가 깊습니다.

  • 저장 데이터:
    • 기본형 변수(Primitives): int, double, boolean 등 실제 값.
    • 객체 참조(Object References): Heap 영역에 있는 객체를 가리키는 주소 값.
  • 특징:
    • 메서드가 호출될 때마다 프레임(Frame)이 생성되고, 메서드가 종료되면 해당 데이터는 즉시 사라집니다(LIFO 구조).
    • 객체(Object) 자체는 스택에 저장되지 않습니다. 오직 그 객체를 가리키는 참조값만 저장됩니다.

 

📍 Heap Memory (힙 메모리)

힙은 객체(Object)와 관계가 깊습니다.

  • 저장 데이터:
    • new 키워드로 생성된 모든 객체.
    • 객체 내부의 인스턴스 변수(Primitives 포함)와 다른 객체를 가리키는 참조.
  • 특징:
    • 애플리케이션의 생명 주기 동안 유지되며, 메서드 호출이 끝나도 사라지지 않습니다.
    • 더 이상 참조되지 않는 객체는 Garbage Collector에 의해 청소됩니다.

3. 퀴즈로 다시 보는 핵심 개념

학습한 내용을 바탕으로 헷갈리기 쉬운 개념들을 Q&A로 정리해 봅시다.

Q1. Stack과 Heap의 결정적인 차이는 무엇인가요?

A: 객체(Object)가 어디에 저장되느냐입니다. 객체는 오직 Heap에만 저장될 수 있습니다. Stack에는 그 객체를 가리키는 참조 변수와, 메서드 내의 원시 타입(primitive) 변수들만 저장됩니다.


Q2. 힙(Heap) 메모리에는 정확히 무엇이 저장되나요?

A: 애플리케이션에서 생성된 모든 객체와, 그 객체가 가지고 있는 **필드 값(원시값 및 다른 객체 참조)**들이 저장됩니다.

Q3. 자바 메모리와 관련된 다른 개념들은 무엇이 있나요?

A: 자바 메모리 동작 원리는 동시성(Concurrency), 객체 구성(Object Composition), static 키워드와 밀접하게 연관되어 있습니다. 예를 들어, Stack은 스레드마다 별도로 생성되므로 스레드 안전(Thread-safe)하지만, Heap은 모든 스레드가 공유하므로 동시성 문제가 발생할 수 있습니다.

 


결어

최근 들어서 AI 를 통한 개발을 많이 하면서, 신입 개발자, 아니 그러니까 CS 전공을 하는 학생들이나. 혹은 Antigravity 를 사용해서 자동으로 Website 를 빠르게 빌드해서 본인의 웹사이트를 만들어서 타인에게 어필하는 사람들이 많다. 물론 간단한 Static Webstie 라고 한다면야 Memory 관리에 대해서 깊게 들어갈 필요도 없다.

 

 

하지만 당신은 GigaChad 개발자가 되야한다면 

 

자바 메모리 구조를 이해하는 것은 NullPointerException이나 StackOverflowError, OutOfMemoryError 같은 에러를 만났을 때 당황하지 않고 해결할 수 있는 힘이 된다, 메모리 흐름이 어떻고 데이터를 어떻게 흐름을 정리하고 또한 수많은 AI 시대에 개발자 시대가 끝났다는 호들갑 사이에서 당신이 살아남기 위해서는, 데이터의 흐름을 코드를 읽고 "머릿속에 가시화 하고 그것을 육안으로 확인 할 수 있어야" 한다 

 

 

  • Stack: 메서드 실행을 위한 임시 작업 공간 (변수, 참조값)
  • Heap: 데이터(객체)를 위한 창고 (GC의 대상)
  • JVM: 이 창고를 관리하는 관리자

 

 

이래도 Java 가 어려우면, 내가 설명한 것보다 더 쉽게 설명하신 분들의 글이 여기저기 많이 있을텐데,

그걸 읽는게 더 도움이 될 것 같다...

Salieri
@Salieri :: 살리에리의 인생살이 채널

평소에 내가 좋아하는것과 싫어하는 것들 그리고 왜 안되나 싶은 것들을 업로드 하는 블로그입니다 인생살이도 업로드 하고있어요. 제가 걸어온 길이 당신에게 있어서 도움이 되는 이정표였으면 좋겠네요. 질문은 항상 넓은 마음으로 받고있답니다. 대답하기 곤란한 질문이 아닌 이상 제에게 이메일을 써주세요 트위터 : https://twitter.com/@Salieri1845799 깃허브 : https://github.com/salieri009

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차