객체 지향 프로그래밍/Java

메모리 구조 - 스태틱, 스택, 힙 영역

ghtis1798 2020. 12. 22. 03:30

스택과 힙 영역

코드 영역과 데이터 영역

 

  • 메모리 공간은 코드 영역과 데이터 영역으로 분리됨

코드 영역과 데이터 영역으로 분리된 메모리

Static, Stack, Heap 영역

  • 데이터 영역은 다시 Static, Stack, Heap영역으로 분리됨
  • Static 영역은 클래스가 저장되는 공간
    • 클래스 멤버 변수가 할당되며 JVM이 종료될때까지 존재한다.
  • Stack 영역은 메소드가 저장되는 공간
    • 메소드로 넘겨 받은 매개변수, 메소드 안의 지역변수가 할당된다.
    • Stack Frame이 소멸 시 지역 변수도 같이 소멸된다.
  • Heap 영역은 객체가 저장되는 공간
    • 객체 멤버 변수가 할당된다.
    • 객체는 사용되지 않을 경우 가비지 컬렉터에 의해 소멸된다.
    • 객체 소멸시 Heap에 저장된 객체 멤버 변수도 같이 소멸된다.

데이터 영역 메모리 분할

자바 코드 실행 과정

  • 자바 실행 환경이 프로그램의 main() 메서드 존재 유무를 확인한다.
  • JRE가 main 메소드를 발견하면, JVM을 부팅한다.
  • JVM은 부팅 후 java.lang 패키지를 포함시킨 뒤 스태틱 영역에 로드한다.
  • JVM은 클래스 및 import된 패키지들을 스태틱 영역에 로드한다.
  • {}로 구성되는 스택프레임이 스택영역에 할당된 뒤 main 메서드가 로드된다.
  • main 메서드의 args 변수 공간을 할당하고 값을 저장한다.
  • main 메서드 명령문 실행

 

참고 - 김종민 저, 스프링 입문을 위한 자바 객체 지향의 원리와 이해