Stack, Method, Heap 메모리

2024. 8. 11. 08:00·Computer Science

1. 스택(Stack) 메모리

스택 메모리는 함수 호출과 관련된 데이터(로컬 변수, 함수 호출 스택 등)를 저장하는 데 사용된다. 스택은 LIFO(Last In, First Out) 구조를 따릅니다. 즉, 가장 나중에 저장된 데이터가 가장 먼저 꺼낸다.

주요 특징

  • 로컬 변수: 함수나 메서드에서 선언된 변수는 스택 메모리에 저장된다. 이 변수들은 함수 호출이 끝나면 메모리에서 자동으로 제거된다.
  • 메서드 호출: 각 메서드 호출에 대해 스택 프레임이 생성된다. 스택 프레임은 메서드의 로컬 변수, 매개변수, 반환 주소 등을 저장한다.
  • 한정된 크기: 스택은 메모리의 크기가 제한되어 있으며, 너무 깊은 재귀 호출이나 지나치게 많은 메서드 호출로 인해 스택 오버플로우가 발생할 수 있다.
public void exampleMethod() {
    int localVariable = 10; // 이 변수는 스택 메모리에 저장됨
}

 

2. 메서드(Method) 영역

메서드 영역은 자바의 메모리 관리에서 클래스와 관련된 메타데이터를 저장하는 영역이다. JVM(Java Virtual Machine)에서는 메서드 영역을 사용하여 클래스 정보, 메서드 정보, 상수 풀 등을 관리한다.

주요 특징

  • 클래스 데이터: 클래스의 구조와 메타데이터(클래스 이름, 필드, 메서드 등)가 저장된다.
  • 상수 풀: 클래스와 메서드에서 사용하는 상수(문자열, 상수값 등)가 저장된다.
  • 정적 변수: static으로 선언된 변수와 메서드는 메서드 영역에 저장된다.
public class Example {
    public static int staticVariable = 10; // static 변수는 메서드 영역에 저장됨
    public void instanceMethod() {
        // 메서드 영역에 메서드 정보가 저장됨
    }
}

 

3. 힙(Heap) 메모리

힙 메모리는 동적으로 생성된 객체를 저장하는 메모리 영역이다. 자바에서는 new 키워드를 사용하여 객체를 생성하면 이 객체는 힙 메모리에 할당된다. 힙 메모리는 동적 메모리 할당을 지원하며, JVM의 가비지 컬렉터에 의해 관리된다.

주요 특징

  • 객체 저장: 힙 메모리에는 객체의 인스턴스와 배열이 저장된다. 객체는 힙에서 생성되며, 참조는 스택에 저장된다.
  • 가비지 컬렉션: 사용되지 않는 객체는 가비지 컬렉터에 의해 자동으로 메모리에서 제거된다. 이는 메모리 누수를 방지하고, 메모리 관리를 효율적으로 수행하는 데 도움이 된다.
  • 비교적 큰 메모리 영역: 힙은 스택에 비해 상대적으로 큰 메모리 영역이다. 하지만, 많은 객체를 생성하면 메모리 부족 문제를 일으킬 수 있다.
public class Example {
    public void createObject() {
        ExampleObject obj = new ExampleObject(); // 객체는 힙 메모리에 저장됨
    }
}

class ExampleObject {
    // 객체의 데이터가 힙 메모리에 저장됨
}

 

 

간단하게 말하자면...

 

  • 스택 메모리: 함수 호출과 로컬 변수를 관리하는 메모리 영역. LIFO 구조를 따르며, 메서드 호출 시 스택 프레임이 생성됨.
  • 메서드 영역: 클래스 정보와 메타데이터를 저장하는 메모리 영역. 클래스와 메서드의 정보를 관리함.
  • 힙 메모리: 동적으로 생성된 객체와 배열을 저장하는 메모리 영역. 가비지 컬렉터에 의해 관리되며, 메모리 누수를 방지하는 데 도움이 됨.

 

반응형

'Computer Science' 카테고리의 다른 글

자료 구조 - 복잡도  (0) 2024.09.21
트랜잭션과 무결성  (0) 2024.09.14
CPU 스케줄링 알고리즘  (7) 2024.09.07
메모리(Memory)  (6) 2024.09.01
Overflow, underflow  (0) 2024.08.10
'Computer Science' 카테고리의 다른 글
  • 트랜잭션과 무결성
  • CPU 스케줄링 알고리즘
  • 메모리(Memory)
  • Overflow, underflow
wanduek
wanduek
차근차근 쌓아가는 지식
  • wanduek
    완득님의 블로그
    wanduek
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Onboarding (0)
      • 아티클 (0)
      • SQL 정리 (20)
      • 웹개발 기초정리(프엔) (9)
      • (Java)코테연습 (27)
      • 미니 프로젝트 (9)
        • 자기소개 웹페이지 (5)
        • 수강생 관리 프로그램(Java) (4)
      • GitHub 오류 및 명령어 정리 (7)
      • Java 문법정리 (Array부터) (17)
      • Java로 이용한 기능 (2)
      • Web지식 (12)
        • web3 (6)
        • 네트워크 (6)
      • 인텔리제이 오류 대처 방법 (1)
      • Computer Science (7)
      • Spring (38)
        • 미니 프로젝트(배달) (2)
        • Spring 트러블 슈팅 (3)
        • QueryDSL, JPQL (3)
        • 미니 프로젝트(뉴스피드) (5)
        • 미니 프로젝트(Trello) (2)
      • 개발자 밋업 (1)
      • Docker (2)
      • Redis (1)
      • AWS (6)
        • AWS 트러블 슈팅 (2)
      • Jmeter (2)
      • 우리 지금 만나 (12)
      • Kafka (1)
      • RabbitMQ (2)
        • 트러블 슈팅 (1)
      • STOMP (2)
      • WebSocket (3)
        • 트러블 슈팅 (2)
      • Node.js (2)
      • Elastic Search (2)
      • Nginx (1)
      • 퍼블엘 (2)
      • openresty (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    where
    fetch
    jquery
    백앤드개발자 #초심자
    ㅏㄷ
    SQL
    github
    groupby
    json
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
wanduek
Stack, Method, Heap 메모리
상단으로

티스토리툴바