본문 바로가기
프로그래밍/Java

[실전 자바-기본편] 자바 메모리 구조와 static

by Dean30 2024. 2. 14.
728x90

 

자바 메모리 구조

자바 메모리 구조 쉬운 버전

  • 메서드 영역: 클래스 정보를 보관한다.
  • 스택 영역: 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때마다 하나씩 쌓인다.
  • 힙 영역: 객체(인스턴스)가 생성되는 영역이다. new 영역을 사용하면 이 영역을 사용한다. 배열도 이 영역에 생성된다.

 

자바 메모리 구조 실제 버전

  • 메서드 영역: 프로그램을 실행하는 데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.
    • 클래스 정보: 클래스의 실행 코드, 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재한다.
      • 인스턴스의 메서드는 힙 영역에 저장되는 것이 아니라 여기에 저장된다.
    • static 정보: static 변수들을 보관한다.
    • 런타임 상수 풀: 프로그램 실행에 필요한 공통 리터럴 상수를 보관한다.
  • 스택 영역: 자바 실행 시 하나의 스택이 생성된다. 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.
    • 스택 프레임: 스택 영역에 쌓이는 네모 박스 하나가 스택 프레임이다. 메서드를 호출할 때마다 하나의 스택 프레임이 쌓이고 메서드가 종료되면 해당 스택 프레임이 제거된다.
  • 힙 영역: 객체(인스턴스)와 배열이 생성되는 영역이다. 더 이상 참조되지 않는 객체는 가비지 컬렉터에 의해 제거된다.

 

참고 메모리 구조

 

스택 영역과 큐 자료구조

스택: LIFO 후입 선출 구조

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

 

큐: FIFO 선입 선출 구조

 

 

static

  • 특정 클래스에서 공용으로 함께 사용할 수 있는 변수를 만들 때 사용
  • static 변수 = 정적 변수 = 클래스 변수
  • static이 붙은 멤버 변수는 인스턴스가 저장되는 힙 영역이 아니라 메서드 영역의 static 영역에 저장됨
728x90

댓글