자바의 메모리 구조

99·2024년 9월 10일

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

  • 메서드 영역 : 클래스 정보를 보관한다. 이 클래스 정보가 붕어빵 들이다.
  • 스택 영역 : 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때 마다 하나씩 쌓인다.
  • 힙 영역 : 객체(인스턴스)가 생성되는 영역이다. new 명령어를 사용하면 이 영역을 사용한다. 쉽게 이야기해서 붕어빵 틀로부터 생성된 붕어빵이 존재하는 공간이다. 참고로 배열도 이 영역에 생성된다.

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

  • 클래스 정보 : 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드등 모든 실행 코드가 존재한다.
  • static 영역 : static 변수들을 보관한다. 뒤에서 자세히 설명한다.
  • 런타임 상수 풀 : 프래그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다. 예를 들어서 프로그램에 "hello"라는 리터럴 문자가 있으면 이런 무자를 공통으로 묶어서 관리한다. 이 외에도 프로그램을 효율적으로 관리하기 위한 상수들을 관리한다.

스택 영역 : 자바 실행 시, 하나의 실행 스택이 생성된다. 각. 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.

  • 스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스텍 프레임이다. 메서드 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.
  • 더 정확히는 각 쓰레드 별로 하나의 스택이 생성된다.

힙 영역 : 객체의 배열이 생성되는 영역이다. 가비지 컬렉션이 이루어지는 주요 영역이며, 더이상 참조되지 않는 객체는 가비지 컬렉션에 의해 제거된다.

객체가 생성될때 인스턴스 변수에는 메모리가 할당되지만, 메서드에 대한 새로운 메모리 할당은 없다. 메서드는 메서드 영역에서 공통으로 관리되고 실행한다.
인스턴스의 메서드를 호출하면 실제로는 메서드 영역에 코드를 불러서 수행한다.

후입선출

  • 여기서 가장 마지막에 넣은 3번이 가장 먼저 나온다. 이렇게 나중에 넣은 것이 가장 먼저 나오는 것을 후입 선출이라 하고, 이런 자료구조를 스택이라한다.

선입선출

  • 후입선출과 반대로 가장 먼저 넣은 것이 가장 먼저 나오는 것을 선입 선출이라고 한다. 이런 자료구조를 라고 한다.

자바는 스택 영역을 사용해서 메서드 호출과 지역 변수(매개변수 포함)을 관리한다.
메서드를 계속 호출하면 스택 프레임이 계속 쌓인다.
지역변수(매개변수 포함)는 스택 영역에서 관리한다.
스택 프레임이 종료되면 변수도 함께 제거된다.
스택 프레임이 모두 제거되면 프로그램도 종료된다.

profile
부족과 결핍의 전환

0개의 댓글