Java를 쓰면서 JVM에 대해 너무 잘 알지 못하고 쓰는 것 같아 정리하면서 머리에 넣어 보고자 한다.
JVM 은 자바 가상머신이며, 자바 바이트코드를 실행 할 수 있는 주체로 JVM 덕분에 CPU나 OS와 별개로 독릭적으로 동작 가능하다.
JVM의 경우 크게 Garbage Collector, Execution Engine, Class Loader, Runtime Data Area 4가지로 나뉜다.
JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 런타임 시에 동적으로 클래스를 로드한다.
클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행한다. JIT 컴파일러 방식을 사용하는데,
JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생한다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행한다.
Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없다.(상세하게 따로 정리 예정)
JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역. 이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.