[Java] JVM 구조와 메모리 영역 - Method, Heap, Stack Area

2021. 8. 3. 18:23☕️ java

JVM 동작 과정

JVM은 자바 가상 머신으로, 자바 바이트 코드를 해석하고 실행하는 역할을 합니다. 자바 코드는 JVM을 통해 실행되므로 Window, Linux와 같은 다른 OS에서도 동일하게 실행할 수 있다는 장점이 있습니다. 

 

우아한 테크 JVM 편 캡쳐본

 

구체적으로 메모리 영역을 공부하기 전에 JVM이 자바 소스코드를 어떻게 OS에서 실행하는지 과정을 살펴봅시다.

 

1. 자바 소스코드인 .java 파일을 컴파일러가 자바 바이트 코드인 .class로 변환합니다.

2. .class 코드를 JVM의 클래스 로더에게 보냅니다.

3. 클래스 토더는 JVM 런타임 데이터 영역으로 로딩하여 JVM의 메모리에 올립니다.

 

 

모든 자바 프로그램은 JVM을 통해 실행됩니다.
일단 프로그램이 실행되면 JVM은 OS로부터 프로그램을 수행하는데 필요한 메모리를 할당받습니다.

 

이 메모리를 가지고 JVM은 용도에 따라 구분해서 사용합니다.


📂 메모리 영역

Method 영역

static 영역 (== class, method 영역으로도 불림) 은 전역변수나 static으로 선언되는 것들을 메모리에 상주시킵니다.

 

  • 클래스 정보, static 변수, 변수 정보, 메소드 정보 등을 저장합니다.
  • 패키지나 클래스 정보가 올라갑니다.
  • static 이 선언된 클래스 멤버도 올라갑니다.
  • static (전역)변수는 어디든 접근이 가능해지므로 읽기 전용이 아닌 경우는 가능한 사용하지 않습니다.
  • JVM이 동작해서 클래스가 로딩될 때 생성됩니다.
  • JVM이 종료될때까지 유지됩니다.

힙 영역

힙 영역은 인스턴스를 생성할 때 생성되는 메모리 형식입니다.

Instance instance = new Instance();  -> heap에 존재

 

  • "new"를 사용하여 객체를 만들 때 저장됩니다.
  • 참조형(class, interface, enum, Array 등) 자료형도 같이 저장됩니다.
  • 힙의 참조 주소는 "스택"이 갖고 있고 해당 객체를 통해서만 힙 영역에 있는 인스턴스를 핸들링할 수 있습니다.
  • GC가 정리하기 전까지는 남아있습니다.

힙 영역에 저장되는 참조형 타입

 


스택 영역

스택 영역은 int, long, boolean 등 기본 자료형을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역입니다.

  • 쓰레드 별로 1개만 생성됩니다.
  • 하나의 쓰레드는 내부적으로 static, stack, heap 영역을 갖게 됩니다.
  • → 그래서 A쓰레드는 다른 쓰레드에 접근할 수는 없지만, static과 heap 영역을 공유하여 사용할 수 있습니다.
  • 메소드가 호출될 때마다 생성하고,
  • 메서드 실행이 끝나면 pop되어 제거됩니다.

 

 

 

 

 

 

📚 참고문헌

 

자바 메모리 구조 뿌시기 [ JVM이란? ]

JAVA 메모리 - 스태틱(static), 스택(stack), 힙(heap) 이란?

[Java] JVM 메모리 영역

자바(JVM)의 메모리 사용 방식 (T 메모리 구조)

JAVA/ Static, Stack, Heap 메모리 영역의 이해

JAVA에서의 메모리 관리 (Heap, Stack, Static )

[JAVA] Static Keyword 와 Method Area (메소드 영역)