작성중인 글이며 언제든 수정될수 있습니다.
💡 JVM은 Java Virtual Machine 을 줄인 것으로 직역하면 '자바를 실행하기 위한 가상 기계' 라고 할수있다 Java로 작성된코드는 JVM 위에서 실행되며 이는 어플리케이션(실행파일)이 직접적으로 OS 를 통해 하드웨어와 연결되는 것이아닌 JVM과 통신하고 JVM이 운영체제를 통해 컴퓨터에 명령을내린다. 이로써 Java는 OS에 종속적이지 않으며 같은 자바코드라면 어떤 운영체제등에서도 같은 실행이 보장된다
"Write once. run anywhere."
작성한 소스코드(.java) 파일은 Java 컴파일러에 의해 JVM에서 실행가능한 파일인 바이트코드로 변경되고 JVM은 이 클래스코드를 읽어 실행시킨다.
JVM은 Class Loader를 통해 컴파일된 Class 파일을 읽어 Execution Engine 을 통해 실행한다.
Runtime Data Area는 JVM이 프로그램을 실행하기 위해 OS로부터 할당받는 메모리 영역이다.
모든 스레드가 접근 가능한 영역
생성된 객체, 배열등이 이곳에 저장되며 GC에 의해 지워진다. (객체의 생명주기가 반복되는곳)
클래스(또는 인터페이스)에 대한 메타데이터 정보가 저장되는 영역으로 논리적으로는 Heap 영역에 속해있으며 JVM이 동작하고 클래스가 로드 될때 적재되어 프로그램이 종료될 떄까지 저장 된다.
클래스의 메타정보들이 담긴다.
스레드 마다 하나씩 생성되는 영역으로 각 스레드는 고유한 영역을 가짐
int,long등 자바의 기본형(primity type)을 생성할떄 저장하는 공간, 임시적으로 사용되는 변수가 저장 되는영역으로
메서드 호출마다 JVM stack에 스택 프레임(호출된 메서드가 사용하는 공간)이 생성되며 메서드 안에 사용되는 값들을 저장하고 메서드 종료시 프레임별로 삭제된다.
자바 코드가 아닌 실제로 실행할수있는 기계어로 작성된 프로그램을 실행 시키는 영역으로 자바코드가아닌 자바 이외의언어(C,C++)등으로 작성된 네이티브 코드를 실행하기 위한 공간
PC 영역은 스레드 시작시 생성되며 현재 수행중인 JVM 명령어의 주소를 저장한다. (JVM 명령어가 어디를 실행되는지 기록)
좋은 글 감사합니다. 자주 방문할게요 :)