위 그림에서 JVM에 대해서 공부했다.
Class Loader System
클래스 파일에 들어있는 정보가 클래스 로더에 의해 Method Area에 올라간다.
Bytecode - JVM이 알아들을 수 있는 명령어 집합. JVM의 목적은 Bytecode를 기계어로 번역해서 CPU에게 작업을 시키는 것.
Bytecode를 기계어로 번역하는걸 Interpreter가 수행
Runtime Data Areas
5가지 요소로 구성되어 있음.
Method Area
Class에 대한 정보가 저장되어 있는 영역.
Heap
런타임에 생성되는 모든 객체들이 저장 (GC)
Method Area & Heap은 모든 스레드가 공유하는 영역. 멀티스레드 프로그래밍을 할 때 동기화에 주의해야 하는 영역.
JVM Stacks(Java Threads)
Method를 실행하기 위한 정보들이 저장되는 공간.
Frame이란 자료구조가 들어감. Frame은 Method가 하나 호출될 때마다 새로 생김 Method가 끝나거나 예외처리가 될 경우 사라짐.
Program Counter Registers
현재 실행되고 있는 명령어의 주소를 저장하고 있는 곳.
Native Method Stacks
C, C++로 작성된 Method를 실행할 때 사용되는 스택.
JVM Stacks & Program Counter Registers & Native Method Stacks 이 세 개의 영역은 스레드가 생성 될 때마다 같이 생성 됨. 서로 다른 스레드가 침범할 수 없는 영역.
하나의 Method안에서 지역변수의 동시성 문제를 걱정하지 않아도 되는 이유.