Java 가상 머신 내부에는 각 스레드에 Java 스택이 주어집니다. Java 스택에는 스레드가 호출 한 각 메소드의 로컬 변수, 매개 변수 및 리턴 값을 포함하여 다른 스레드가 액세스 할 수없는 데이터가 들어 있습니다. 스택의 데이터는 기본 유형 및 객체 참조로 제한됩니다. JVM에서는 실제 객체의 이미지를 스택에 배치 할 수 없습니다. 모든 오브젝트는 힙에 상주합니다.


https://stackoverflow.com/questions/1208695/where-methods-live-stack-or-in-heap



Thread별로 현재 수행중인 메소드의 정보를 저장하는 곳이다. 이러한 정보를 Stack Frame이라 하며, Stack Frame은 Local Variable Section, Operand Stack, Frame Data로 나뉜다. 


- Local Variable Section


메소드의 파라미터 변수, 로컬 변수를 배열에 저장하여 인덱스를 통해 접근한다. Primitive Type의 변수들은 Fixed된 크기로 할당되지만, Object나 배열같은 Reference Type은 가변의 Reference가 저장된다. (자바는 모든 객체를 Reference로 전달 된다는 걸 알고 있을 것이다.)


다시 말해 Object는 Reference가 저장된다. 그러므로 Reference Type의 변수들은 접근을 하기 위해선 저장된 Reference정보를 가지고 실제 객체가 저장되어있는 Heap이라는 공간에 찾아간다. 이는 메모리 점프를 많이 하게 되므로, Primitive Type의 변수보다 비용이 많이 든다.


-Operand Stack


이도 Local Variable Section과 같이 Array로 구성되어 있다. Operand Stack은 JVM이 프로그램을 수행하면서 연산을 위해 사용되는 데이터 및 그 결과를 저장 하는 곳이다. 


-Frame Data


Constant Pool Resolution정보와 Method가 정상 종료 했을때의 정보, Exception 정보들을 저장하고 있다. Constant Pool Resolution은 바로 Method Area에 저장되어 있는 Constant Pool의 Pointer 정보이다




'프로그래밍 > OS' 카테고리의 다른 글

리눅스 which ,where ,locate  (0) 2018.07.21
리눅스 touch - 파일생성 및 파일의 날짜정보 변경  (0) 2018.07.21
JVM이란?  (0) 2018.04.21
JVM(JavaVirtualMachine)  (0) 2018.04.21
Process 와 Thread 의 차이  (0) 2018.04.16
블로그 이미지

낭만가을

,