JVM : 자바 바이트 코드는 JVM 위에서 동작, JVM이 설치된 환경이라면 플랫폼에 상관없이 어디든 실행 가능
Runtime Data Areas : JVM이 Java Bytecode를 실행하기 위해 사용하는 메모리 공간
1) 모든 스레드가 공유 : method area, heap
→ method area : 클래스 로더가 클래스 정보를 읽어오면, 클래스 정보를 파싱해서 method area에 저장
→ heap : 프로그램을 실행하면서 생성한 모든 객체를 힙에 저장
2) 스레드마다 존재 : Java stacks, PC registers, native method stacks
2-1) PC registers : 각 스레드는 메서드를 실행하고 있고, pc는 그 메서드 안에서 몇 번째 줄을 실행해야 하는지 나타내는 역할
2-2) Stack : 자바 스택은 스레드별로 1개만 존재하고, 스택 프레임은 메소드가 호출될 때마다 생성된다. 메서드 실행이 끝나면 스택 프레임은 pop되어 스택에서 제거된다.
2-2.1) Stack Frame : 스택프레임은 메서드가 호출될 때마다 새로 생겨 스택에 push된다.
→ Locol variables array(로컬 변수 테이블) , Operand stack(호출된 명령어 저장 스택), Frame Data를 갖고있음.
→ Frame Data는 Constant Pool(상수 풀), 이전 스택 프레임에 대한 정보, 현재 메서드가 속한 클래스/객체에 대한 참조 등의 정보를 가진다.
2-3) Native Method Stack : Java Bytecodes가 아닌 다른 언어로 작성된 메서드 (성능 향상을 위해 C나 C++언어 메소드 사용)