코딩하는 몽구리

자바 메모리 구조와 static 본문

Java

자바 메모리 구조와 static

코딩구리 2024. 3. 25. 23:09

자바의 메모리 구조는 메서드 영역, 스택 영역, 힙 영역 3개로 나눌 수 있다.

  • 메서드 영역: 클래스 정보를 보관한다. 이 클래스 정보를 붕어빵 틀이라고 할 수 있다.

  • 스택 영역: 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때마다 하나씩 쌓인다.

  • 힙 영역: 객체(인스턴스)가 생성되는 영역이다. new 명령어를 사용하면 이 영역을 사용한다. 붕어빵 틀로부터 생성된 붕어빵이 존재하는 공간이다. 참고로 배열도 이 영역에 생성된다.

  • 메서드 영역(Method Area) : 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.

    • 클래스 정보: 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재한다.
    • static 영역: static 변수들을 보관한다.
    • 런타임 상수풀: 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.
  • 스택 영역(Stack Area): 처음에는 main메서드가 실행되고 그 다음을 실행되는 메서드가 쌓이게 된다. / 하나의 실행 스택이 생성된다. 각 스택 프레임은 지역변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.

    • 스택 프레임: 스택 영역에 쌓이는 네모 박스를 하나의 스택 프레임이라고 한다. 메서드를 호출할 때마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.
  • 힙 영역(Heap Area): 객체(인스턴스)와 배열이 생성되는 영역이다. 가비지 컬렉션이 이루어지는 주요 영역이며, 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.

| 참고: 스택 영역은 각 쓰레드별로 하나의 실행 스택이 실행된다. 따라서 쓰레드 수 만큼 스택 영역이 생성된다.

'Java' 카테고리의 다른 글

[Java] 인터페이스 다중 구현 이해하기  (0) 2024.06.17
final 변수와 상수  (0) 2024.03.30
캡슐화  (0) 2024.03.24
접근제어자  (0) 2024.03.24
제네릭과 컬렉션  (0) 2024.01.26