자바 메모리 구조 >>> 2

JAVA 2015. 6. 30. 15:44

자바 프로그램의 구동 환경에 대해서 다시 한 번 정리하고자 한다.

자바개발도구 JDK , 자바실행환경 JRE, 자바가상기계 JVM 으로 이루어져 있다.




간단히 말해서 자바 개발 도구로 개발된 프로그램이

자바실행환경에서 해석되어 자바가상기계 위에서 동작하는 것이다.

당연 플랫폼에 종속적이지 않는 장점을 가지게 된다.

(윈도우, 리눅스 등 OS에 영향 없이 한 개의 코드로 모두 실행 가능하다)


이를 그림으로 나타내면 다음과 같다.




보통의 프로그램들에서의 메모리 구조는


코드실행영역과 데이터 저장 영역으로 나뉜다.


자바와 같은 객체 지향 프로그램에서는 다음과 같이 데이터 저장 영역이


1) 스태틱 영역(클래스들의 놀이터)

2) 스택 영역(메서드들의 놀이터)

3) 힙 영역(객체들의 놀이터)


으로 나뉜다.








** "Hello World"라는 것을 출력하는 프로그램을 통해 JVM이 어떻게 프로그램을 구동시키는 지에 대해서 알아보겠다.




1) 자바 프로그램이 시작하여 먼저 main()함수가 있는지를 확인 한 후에

전처리 과정을 실시한다. 전처리 과정이라함은 자바에 반드시 포함되는 java.lang클래스를 스태틱영역에 올리는 것이다.그리고 개발자가 만든  클래스들과 import한 클래스들을 스태틱영역에 올린다.





2) 스택영역에 main함수가 할당된다.

3) 스택영역에 main함수의 인자인 args가 할당된다.






4) println과 같은 메소드는 메모리 구조에 큰 변화가 일어나지 않지만 GPU를 통해 화면에 출력하는 동작을 하게 된다.





5) } 이라는 main()메소드의 끝과 함께 스택영역에 할당된 스택프레임이 소멸된다.




* Main()메서드가 스택영역에 올라가면서 주요 로직이 동작하게 된다.



와 같은 코드에서도 순서대로 


1) i라는 변수가 스택에 할당(현재 쓰레기값)

2) i에 20이 할당

3) j 라는 변수가 스택에 할당

4) j라는 변수에 30이 할당

5) i 에 i의 값과 j의 값이 합해짐

main()메서드 종료되면서 없어짐


과 같이 동작하게 된다.


static 변수 즉 전역 변수는 static영역에 할당된다.

'JAVA' 카테고리의 다른 글

자바가 확장한 객체지향  (0) 2015.06.30
자바와 객체지향  (0) 2015.06.30
자바 스레드의 이해  (0) 2015.06.30
자바 메모리 구조>>1  (0) 2015.06.30
GC - Garbage Collection 이란?  (0) 2015.06.30
Posted by slender ankles
,