본문 바로가기
안드로이드/etc.

[CS] JVM 메모리 영역 (Method, Heap, Stack Area)

by jinwo_o 2024. 8. 30.

메서드 영역 (Method Area, Static Area)

  • JVM 이 시작될 때 생성되는 공간으로 바이트 코드(.class)를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간
  • JVM 이 동작하고 클래스가 로드될 때 적재되서 프로그램이 종료될 때까지 저장된다.
  • 모든 쓰레드가 공유하는 영역이라 다음과 같이 초기화 코드 정보들이 저장되게 된다.
    • Field Info : 멤버 변수의 이름, 데이터 타입, 접근 제어자의 정보
    • Method Info : 메소드 이름, return 타입, 함수 매개변수, 접근 제어자의 정보
    • Type Info : Class 인지 Interface 인지 여부 저장, Type 의 속성, 이름 Super Class 의 이름

 

힙 영역 (Heap Area)

  • 메서드 영역와 함께 모든 쓰레드가 공유하며, JVM 이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역
  • 참조형(Reference Type)의 데이터 타입을 갖는 객체와 인스턴스 변수, 배열 등은 Heap 영역에 데이터가 저장된다.
  • 변수(객체, 객체변수, 참조변수)는 Stack 영역에서 Heap 영역에 저장된 실제 데이터의 참조값(메모리 주소)을 인스턴스화를 통해 받아옵니다.
  • Java 나 Kotlin 을 이용하면 가비지 컬렉션(GC)이 Heap 영역에서 동적으로 할당됐던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거한다.

 

스택 영역 (Stack Area)

  • 기본 자료형(int, double, byte, long, boolean 등)을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역
  • 메소드 내에서 정의하는 기본 자료형에 해당되는 지역변수(매개 변수 및 블록문 내 변수 포함)의 데이터 값이 저장되는 영역
  • 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 해제된다.
  • LIFO(Last In First Out)의 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.
  • 메서드 호출 시마다 각각의 *스택 프레임(그 메서드만을 위한 공간)이 생성되고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다. 그리고 메서드 수행이 끝나면 프레임별로 삭제된다.
    • 스택 프레임 : 메서드가 호출될 때마다 프레임이 만들어지고, 현재 실행중인 메서드 상태 정보를 저장하는 곳이다. 메서드 호출 범위가 종료되면 스택에서 제거된다. 스택 프레임에 쌓이는 데이터는 메서드의 매개변수, 지역변수, 리턴값, 연산시 결과값 등이 있다.

 

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com

 

[JAVA/자바] 메모리 구조(static, stack, heap)

 이번 글은 자바(JAVA)를 사용하는 입장에서 알아야 할 메모리 구조 및 특징에 대해서 알아...

blog.naver.com