: JVM은 java byte code를 실행하는 가상머신
: 인터프리터(프로세스가 코드를 실행시키는 방식)나 JIT컴파일(또는 동적번역, 실제 실행되는 시점에 기계어로 컴파일)방식으로 다른 컴퓨터에서 바이트코드를 실행할 수 있도록 구현
: 플랫폼에 독립적
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
Class Loader : java 컴파일러 소스를 컴파일 해 만들어 낸 바이트코드 클래스를 엮어 Runtime Data Area 형태로 메모리에 적재하고 메타데이터 관리
Execution Engine : 메모리에 적재된 클래스들을 기계어로 번역하여 명령어 단위로 실행
Garvege Collector : 객체 생명주기 관리, Heap 메모리 영역에 생성된 객체들 중 유효한 참조가 없는 객체를 자동으로 탐색하고 제거
Class Loader : 런타임 중 JVM의 메소드 영역에 동적으로 java 클래스를 로드하는 역할
Method Area : 클래스 멤버 변수, 메소드 정보, 타입 정보, 상수 풀, 정적 변수 등이 생성되는 영역
Heap Area : 동적으로 생성된 객체와 배열이 저장되는 Garbage Collector의 대상이 되는 영역
JVM Language Stacks : 지역 변수, 파라미터 등 생성되는 영역
Java Thread : 동작하고 있는 프로그램을 프로세스라고 하는데, 보통 한 개의 프로세스는 한 가지 일을 하지만, 쓰레드를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 일을 동시에 할 수 있음
Program Counter Register : 현재 쓰레드가 실행되는 부분의 주소와 명령 저장
Native Method Stack : 자바 외의 언어로 작성된 네이티브 코드를 위한 메모리 영역