JVM 관점의 스레드

개발하는개발자·2022년 9월 7일
0

Java Thread

목록 보기
2/10

JVM에서의 스레드와 메모리 구성


자바 앱 실행 => JVM 프로세스 시작 및 main thread 생성

JVM은 프로세스를 실행하면서 OS로부터 Runtime Data Area 메모리를 할당받습니다.


Method Aread

  • 클래스 정보, 정적 변수 등 JVM 프로세스가 시작될 때 데이터가 할당
Heap
  • 동적으로 데이터가 할당되는 영역
  • 레퍼런스 타입 객체 생성시에 실제 객체가 올라가는 메모리 영역
PC(Program Counter) Register
  • 해당 스레드에서의 명령 흐름을 추적하고 관리
  • 현재 수행중인 JVM 명령의 주소가 저장
  • 연산을 위해 필요한 피연산자를 임시로 저장
Stack (= call stack, execution stack)
  • 메서드 호출시 호출된 메서드를 위한 frame이 생성
  • 메서드 scope 내에서 발생하는 지역변수,매개변수,리턴값 등이 frame에 저장됨
  • 메서드 scope이 리턴되면 frame에 할당되었떤 변수들과 frame은 반환됨
  • 메서드 내에서 메서드를 호출하는 경우, 호출된 메서드 frame이 바로 위에 생기면서 실행흐름이 해당 메서드로 넘어가게됨
Native Method Stack
  • 자바가 아닌 다른 언어를 JNI를 통해 실행하기 위한 코드 공간

JVM 스레드의 종류

-데몬 스레드
데몬 스레드는 다른 비데몬 스레드가 없다면 동작을 중지합니다.
JVM의 가비지 컬렉션, 모니터링 등 애플리케이션 운용을 위해 사용하다가 주요 스레드가 종료되면 함께 종료되어야 할 경우, 데몬으로 설정하면 유용합니다.

-비데몬 스레드
프로그램 실행 진입점인 main thread는(static void main(String[] args) 비데몬 스레드로 생성되어, 이 스레드가 동작을 중지하거나 종료하면 다른 데몬스레드들도 함께 중지하게 됩니다.

JVM 메모리 관점의 멀티프로세싱과 멀티 스레딩 차이


멀티 프로세싱

멀티 프로세싱은 완전히 독립된 메모리 공간을 할당받습니다.
프로세스간 통신을 위해서는 IPC(Inter Process Communication) 방법을 별도로 이용해야 하므로 스레드에 비해 비용이 큽니다.
IPC 방법으로는 파이프라인 전달, shared memory, message queue 등이 있습니다.

멀티 스레딩

멀티 스레딩은 하나의 프로세스 내에서 method area, heap은 공유하고 PC Resiter, JVM Stack, Native Method Stack 공간만 별도로 가집니다.
Method area와 heap 영역이 공유되기 때문에 프로그래밍시 동기화 문제가 발생하지 않도록 유의하여야 합니다.
프로세스보다 경량화된 독립공간을 가지기 때문에 공간 절약의 이점이 있습니다.

profile
하루에 하나씩 배우자

0개의 댓글