[컴][자바] JVM 의 stack 과 data areas

jvm 의 stack / jvm stack / java stack / jvm 의 memory 구조 / java memory structure

JVM 이 가지고 있는 stack 에 대해 알아보자. 자세하고 세부적인 설명은 ref. 2 를 추천한다.

JVM runtime data areas

fig5-1
출처 : http://www.artima.com/insidejvm/ed2/jvm2.html

위의 그림 중, runtime data areas 가  JVM 이 bytecode 를 실행(execute) 시키면서 필요한 data 를 저장하는 memory 가 필요하다. 그 memory 구성에 대한 그림이다.

그림에서 보듯이 JVM 에서는 memory 를 5부분으로 구분한다.
  1. method area : 1개/application --> thread 사이에서 공유됨
  2. heap : 1개/application --> thread 사이에서 공유됨
  3. java stacks : 1개/thread
  4. pc registers : 1개/thread
  5. native method stacks : 이 녀석은 이 포스트에서 언급하지 않겠다.
각 thread 마다 한 개씩 있다는 뜻은, 다시 말하면 thread 가 생성될 때마다 Java Stack 이 하나 만들어진다는 뜻으로 이해 하면 된다.

java stack

이중에서 java stack 을 좀 더 들여다 보도록 하자.

java stack 은 여러 개의 stack frame 을 만들게 되는데, 이 stack frame 은 method 가 호출될 때마다 만들어진다.[ref. 3]

stack frame

하나의 stack frame 은
  1. local variable section(var register) : local variable(method 의 parameter 포함)
  2. operand stack(optop register) : operand 를 저장
  3. frame data(frame register) : constanct pool resolution, 정상, 비정상적인 method 종료에 필요한 data
    부분으로 나눠진다.(그림)

registers

thread 는 4개의 register 를 가지는데,
  1. program counter register : 다음 실행할 instruction 이 있는 메모리번지를 갖는다.
  2. var : local variable section 를 가리킨다.
  3. optop : operanc stack 를 가리킨다.
  4. frame : frame data 를 가리킨다.
이렇게 4개의 register 를 가진다.

image

Reference

  1. http://viralpatel.net/blogs/java-virtual-machine-an-inside-story/
  2. http://www.artima.com/insidejvm/ed2/jvm2.html
  3. http://www.artima.com/insidejvm/ed2/jvm8.html
  4. http://www.artima.com/insidejvm/ed2/jvmP.html
  5. http://performeister.tistory.com/m/38

댓글 없음:

댓글 쓰기