[자바] 메모리영역

ChoRong0824·2023년 7월 2일
0

Java

목록 보기
26/31
post-thumbnail

스택(Stack)

지역 변수, 매개 변수 등의 값들이 저장되는 영역입니다. 프로그램 실행 중에 메소드를 호출할 때마다 각 메소드는 스택에 메모리를 할당받고, 메소드 실행이 종료되면 할당받은 메모리를 반환합니다. 스택은 LIFO 방식으로 동작합니다.
다시 말해, 스택은 메소드가 호출될 때 프레임이라는 메모리 영역을 확보하게 됩니다.
각 프레임은 독립적인 공간으로, 메소드를 호출하는 순서대로 쌓이게 됩니다. 스택에 저장되는 정보는 다음과 같습니다.

  1. 지역변수들과 메소드 호출 시 매개변수
  2. 메소드 반환 값 및 반환 시점
  3. 스레드의 실행 상태

스택은 일련의 실행 프레임을 저장하며, 메소드가 호출될 때마다 프레임이 스택에 추가되고, 메소드가 반환되면 프레임은 스택에서 제거됩니다. 이 구조적 특성 때문에 후입선출 방식으로 동작합니다. 각 스레드는 독립적인 스택을 가지며, 다른 스레드와 공유되지 않습니다


힙(Heap)

동적으로 할당된 객체가 저장되는 공간입니다. 'new' 키워드를 사용하여 생성된 객체는 모두 힙 영역에서 관리됩니다. 가비지 컬렉터는 힙 영역에서 사용되지 않는 객체들을 찾아 메모리를 해제합니다.

다시 말해, 힙 영역은 객체와 객체들의 배열 등 참조 타입 데이터를 저장합니다.
객체가 생성되고 메모리가 할당되면, 해당 객체 참조를 반환합니다.

힙 영역의 주요 특성

  1. 모든 참조 타입 데이터를 저장합니다.
  2. 가비지 컬렉션이 작동하는 곳입니다. 사용되지 않는 객체들을 자동으로 회수하여 메모리를 확보합니다.
  3. 메모리 관리는 동적으로 이루어지기 때문에 크기 조절이 가능하며, 크기에는 제한이 없습니다.
  4. 스레드간에 공유됩니다.

메소드 영역(Method Area)

클래스 정보, 전역 변수 및 정적(static) 변수, 메소드 코드와 같은 프로그램 데이터와 메타데이터가 저장되는 영역입니다. 메소드 영역은 모든 스레드에 의해 공유되며 시스템이 종료되기 전까지 유지됩니다.

다시 말해,메소드 영역은 클래스 로더에 의해 클래스 파일이 로드되면 해당 클래스의 정보 및 메타데이터를 저장하는 영역입니다.

메소드 영역에 저장되는 정보

  1. 클래스의 메타데이터
  2. 클래스 변수(정적 변수)
  3. 클래스 초기화 코드 및 생성자, 메소드 정보 등의 바이트 코드
  4. 메소드(코드) 및 상수 풀(Constant Pool), 필드와 메서드 데이터
  5. 프로그램을 실행 중인 런타임 상수와 런타임 메소드 테이블

메소드 영역에 저장된 데이터는 모든 스레드에서 공유되며, 자바가상머신(JVM)이 실행되고 있는 동안 지속되게 됩니다. 가비지 컬렉션은 이 영역에 영향을 미칠 수도 있지만, 대부분 힙 영역에서 주로 작동하는 것이 일반적입니다. 이번 설명이 더 풍부한 내용을 담고 있기를 바랍니다. 이 각 영역에 대한 이해를 통해 자바에서 메모리의 동작 방식을 보다 명확하게 파악할 수 있게 됩니다.


참고

Java 메모리의 각 영역

메소드 영역 - 클래스,클래스변수
힙 영역 - 객체인스턴스
스택 영역 - 메소드, 지역변수, 매개변수

───────────────
│ Java Memory  │
├──────────────┤
│  Method Area │
│──────────────│
│    Heap      │
│──────────────│
│    Stack     │
───────────────
profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글