JVM
- 자바 바이트 코드는 타겟 플랫폼에 상관 없이 JVM 위에서 동작한다.
- 물론, JVM 은 타겟 플랫폼에 의존한다.
Write Once, Run Anywhere" - Sun Microsysyems
네가 짠 자바 코드를 컴파일해서 배포하면, 어떤 플랫폼이든 다시 컴파일할 필요 없이 실행시킬 수 있어!
하지만 실행하려면 그 플랫폼에 맞는 JVM 이 설치되어 있어야 해!
자바 코드가 실행되기까지

모든 쓰레드가 공유
Method Area
- 클래스 로더가 클래스 파일을 읽어오면, 클래스 정보를 파싱해서 Method Area 에 저장
Heap
- 프로그램을 실행하면서 생성한 모든 객체(인스턴스)를 Heap 에 저장
쓰레드 마다 존재
Program Counter (PC)
- 각 스레드는 메서드를 실행하고 있고, PC 는 그 메서드 안에서 몇 번째 줄을 실행해야 하는지를 나타내는 역할
Stack
- 스택은 스레드 별로 1개만 존재하고, 스택 프레임은 메서드가 호출될 대마다 생성된다.
- 메서드 실행이 끝나면 스택 프레임은 pop 되어 스택에서 제거된다.
Stack Frame
- 스택 프레임은 메서드가 호출될 때마다 새로 생겨 스택에 push 된다.
Native method stack
- Java Bytecode 가 아닌 다른 언어로 작성된 파일을 컴파일할 때 사용되는 메서드이다.

Stack ? Register ?
JVM 은 어째서 레지스터가 아닌 스택을 사용하는가 ?
자바는 네트워크의 다기종의 디바이스에서 균일하게 동작할 수 있음을 보장하고 싶어했다.
디바이스마다 레지스터의 개수는 다르다.
그렇기 때문에 디바이스마다 동일한 동작이 보장될 수 있는 stack을 사용한 것 아닐까?
Reference