경진의 블로그

스레드 - 자바의 런타임 데이터 영역들과 공유 데이터 본문

개인참고자료/자바(네트워크)

스레드 - 자바의 런타임 데이터 영역들과 공유 데이터

aith 2008. 7. 12. 16:13
자바의 런타임 데이터 영역들과 공유 데이터

JVM의 런타임 데이터 영역

PC 레지스터 영역
 - 현재 스레드가 수행하고 있는 코드의 명령과 주소들을 저장한다.

JVM 스택영역
 - 지역 변수, 파라미터, 리턴 값과 지역 객체 레퍼런스를 저장한다.
 - 각각의 스레드들이 자신만의 스택을 만들어서 사용한다.

힙 영역
 - 생성된 객체(aRRAY도 객체임)들을 저장한다.
 - 모든 스레드에 의해서 공유된다.

메소드 영역
 - 각 클래스 또는 인터페이스의 런타임 컨스턴트 풀 영역, 메소드, 생성자를 저장한다. 모든 스레드에 의해서 공유된다.

런타임 컨스턴틑 풀 영역
 - 각 클래스 또는 인터페이스 클래스 변수, static 변수, 클래스 객체 레퍼런스를 저장한다.

네이티브 메소드 스택 영역
 - 일명 C 스택 으로 불린다. JNI의 네이티브 메소드 호출 시 사용되는 스택 영역이다.

PC 레지스터 영역(Program Counter Register)

JVM 안에서 실행되는 모든 스레드에는 각자 자신의 PC(Program Count) 레지스터가 있다. 각 스레드들으느 특정 객체의 메소드를 호출하고 그 메소드를 실행하는 도중 다른 객체의 득정 메소드를 호출하는 등의 과정이 생기는데, PC 레지스터는 해당 스레드가 어떤 부분을 어떤 명령으로 실행할지에 대해 기록하는 영이다. PC 레지스터는 일반적인 메소드를 실행할 경우, 즉 네이티브 메소드가 아닌 경우에는 현재 실행되는 부분의 JvM 명령으 주소를 포함하게 되지만 만약 JNI 사용을 위해 네이티브 메소드를 호출한 경우에는 사용되지 않는다.

JVM 스택 영역(Java Virtual Machine Stacks)

JVM 스레드는 private JVM 스택을 갖게 된다. 즉, JVM 안의 모든 스레드들은 각자 자신만의 고유 스택영역을 갖는다. 따라서 다른 스레드가 자신의 스텍 영역에 접근할 수 없다. 이 스택 영에는 지역 변수와 지역 객체 레퍼런스(객체의 참조 변수), 메소드 파라미터, 메소드 리턴 값 등 어떤 메소드 안에서 사용되어지는 값들이 저장된다.
※ 객체는 저장되지 않는다.

스택 영역과 객체의 참조 변수


힙 영역(Heep)

힙 영역은 'JVM의 모든 스레드들이 공유하는 데이터 영역' 으로서 인스턴스화된 모든 객체가 저장되는 곳이다. 우리가 new 키워드로 어떤 객체를 생성할 때, 그리고 이 영역에 해당 객체가 저장되고 그 겍체가 더이상 사용되지 않을 때, 즉 해당 객체의 참조가 모두 끊어 졌을 때 가비지 컬렉션 목록에 포함되고 그 후 적절한 시점에 JVM 스스로 가비지 컬렉터로 그 객체가 점유 하고 있던 메모리를 반환한다.
※ 배열도 객체다

힙 영역

메소드 영역(Method Area)

메소드 영역은 힙과 같이JVM의 모든 스레드들이 공유하는 데이터 영역이다. 메소드 영역에는 바로 아래 설명한 런타임 컨스턴트 풀과 각 클래스에 대한 생성자와 메소드들에 대한 코드를 저장하는 영역이다.

런타임 컨스턴트 풀 영역(Runtime Constant Pool)

런타임 컨스턴트 풀 영역은 각 클래스에 대한 인스턴스 변수와 인스턴스 레퍼런스(객체의 변수), 그리고 static 변수와 static 인스턴스 레퍼런스가 저장되는 영역이다. 이 영역은 메소드 영역에 의해 할당되고 또한 메소드 영역이 관리하기 때문에 모든 JVM 스레드들이 공유하게 된다.

네이티브 메소드 스택 영역(Native Method Stacks)

네이트브 메소드 스택 영역은 흔히 C 스택이라 불리우는 영역으로 JNI을 사용할 경우 네이티브 메소드에서 사용되는 값을 저장할 때 사용되는 데이터 영역이다.
0 Comments
댓글쓰기 폼