코드 영역과 데이터 영역
- 메모리 공간은 코드 영역과 데이터 영역으로 분리됨
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 메서드 명령문 실행
참고 - 김종민 저, 스프링 입문을 위한 자바 객체 지향의 원리와 이해
'객체 지향 프로그래밍 > Java' 카테고리의 다른 글
스레드 - 멀티 스레드와 멀티 프로세스 쉽게 구분하기 (3) | 2020.12.27 |
---|---|
Java 실행 과정과 메모리 (1) | 2020.12.26 |