본문
객체지향 프로그램의 메모리 사용방식
# 객체지향 프로그램의 메모리 사용방식
코드 실행 영역 |
스태틱(static) 영역 - 클래스들의 놀이터 |
|
스택(stack) 영역 - 메서드들의 놀이터 | 힙(heap) 영역 - 객체들의 놀이터 |
데이터 저장 영역은(코드 실행 영역 제외) 위의 그림과 같이 T처럼 보이기에 앞으로는 T메모리 구조라고 간략하게 지칭하겠다.
- 프로그램 실행 순서
JRE는 먼저 프로그램 안에 main()메서드가 있는지 확인한다. JRE는 Start 클래스에서 main() 메서드를 발견할 수 있을 것이다. main() 메서드의 존재가 확인되면 JRE는 프로그램 실행을 위한 사전 준비에 착수한다. 가상의 기계인 JVM에 전원을 넣어 부팅하는 것이다. 부팅된 JVM은 목적 파일을 받아 그 목적 파일을 실행한다. JVM이 맨 먼저 하는 일은 전처리라고 하는 과정이다. 모든 자바 프로그램이 반드시 포함하게 되는 패키지가 있다. 바로 java.lang 패키지다. JVM은 가장 먼저 java.lang 패키지를 T메모리의 스태틱 영역에 가져다 놓는다. java.lang 패키지가 있기에 System.out.println() 같은 메서드를 쓸 수 있게 되는 것이다.
- main() 메서드가 실행되기 전 JVM에서 수행하는 전처리 작업들
(1) java.lang 패키지를 T메모리의 스태틱 영역에 배치한다.
(2) import된 패키지를 T메모리의 스태틱 영역에 배치한다.
(3) 프로그램 상의 모든 클래스를 T메모리의 스태틱 영역에 배치한다.
스태틱(static) 영역 - 클래스들의 놀이터 | |
스택(stack) 영역 - 메서드들의 놀이터 | 힙(heap) 영역 - 객체들의 놀이터 |
- 지역변수
스택 영역에서 일생을 보낸다. 그것도 스택 프레임 안에서 일생을 보내게 된다. 따라서 스택 프레임이 사라지면 함께 사라진다.
- 클래스 멤버 변수
스태틱 영역에서 일생을 보낸다. 스태틱 영역에 한번 자리 잡으면 JVM이 종료될 때까지 고정된(static) 상태로 그 자리를 지킨다.
- 객체 멤버 변수
힙에서 일생을 보낸다. 객체 멤버 변수들은 객체와 함께 가비지 컬렉터라고 하는 힙 메모리 회수기에 의해 일생을 마치게 된다.
세 가지 변수 유형
이름 |
다른 이름 |
사는 곳(T 메모리) |
정적/static 변수 |
클래스 [멤버] 속성, 정적 변수, 정적 속성... |
스태틱 영역 |
객체/인스턴스 변수 |
객체 [멤버] 속성, 객체 변수... |
힙 영역 |
지역/local 변수 |
지역 변수 |
스택 영역(스택 프레임 내부) |
- 출처 및 참고자료 : 스프링 입문을 위한 자바객체지향의 원리와 이해(김종민 저)
댓글