본문

객체지향 프로그램의 메모리 사용방식

반응형

# 객체지향 프로그램의 메모리 사용방식


 코드 실행 영역

 스태틱(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 변수

 지역 변수 

 스택 영역(스택 프레임 내부) 





출처 및 참고자료 : 스프링 입문을 위한 자바객체지향의 원리와 이해(김종민 저)

반응형

공유

댓글