티스토리 뷰

자바의 JVM(Java Virtual Machine)에서 메모리 구조는 크게 3가지로 나뉜다. ( 메서드 영역, 힙 메모리, 스택 메모리 )

각각 의미와 어떤 데이터가 저장되는지, 또 이를 예제를 통해서 이해해보자.

 

메서드 영역 : 프로그램 실행에 필요한 클래스 정보를 저장하는 공간

저장되는 것들)

 - 클래스 정보 (클래스 이름, 접근제어자 등)

 - 메서드 코드 (실제 메서드 구현 내용)

 - static 변수들

 - 상수 풀 (Constant Pool)

 

힙 메모리 : new 키워드로 생성한 객체와 배열이 저장되는 공간

저장되는 것들)

 - 객체의 인스턴스 변수들

 - 배열 객체들

 - 실제 객체 데이터 

○ Garbage Collector(가비지 컬렉터) : 사용하지 않는 객체를 자동으로 찾아서 메모리를 회수해주는 기능;

    → 현재 실행 중인 스레드에서 도달 가능한 객체(참조가 있는 객체)만 남김.

    → 참조가 전혀 없는 객체를 힙에서 제거함. 

 

스택 메모리 : 메서드가 호출될 때마다 지역 변수와 매개변수를 저장

저장되는 것들) 

 - 지역 변수

 - 메서드 호출 정보 (메서드 프레임) 

 - 매개변수 

 - 리턴 주소 

 

 

이제 예제를 통해서 어떻게 메모리가 작동하는지 추가적으로 이해해보자!!

 

public class MyClass {
    private int number = 10;  // 인스턴스 변수
    
    public void methodA() {
        System.out.println("A 메서드 실행!");
    }
    
    public void methodB() {
        int localVar = 5;  // 지역 변수
        methodA();
    }
    
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.methodB();
    }
}

 

● 메서드 영역

MyClass 클래스 정보
├── methodA() 코드 📝
├── methodB() 코드 📝  
└── main() 코드 📝

 

● 힙 메모리 

MyClass 객체 #1234 → new MyClass(); 부분!!
└── number: 10 💾

 

● 스택 메모리

Thread Main Stack:
├── main() 프레임
│   └── obj: #1234 (참조변수 obj의 힙 메모리 주소 !!)
├── methodB() 프레임  
│   └── localVar: 5
└── methodA() 프레임
    └── (실행 중...)

 

 

여기서 각 메모리의 공유 여부, 관리 방식도 따로 정리해야하지만, 일단 여기까지만 정리하겠다...

자바를 공부하다 보면 강제로 JVM이 어떤 것인지, 또 JVM은 어떤 메모리 구조를 가지고 있는지를 공부하게 된다 ( 조만간 또 수정하러 오겠지...🤩😇)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
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
글 보관함