컴파일러 실행되면서 컴파일 진행 (.java 확장자(소스코드) → .class 확장자(바이트 코드 파일)
JVM은 운영 체제로부터 소스코드실행에 필요한 메모리 할당받음
Runtime Data Area
클래스 로더가 바이트 코드 파일을 JVM 내부로 불러들여 런타임 데이터 영역에 적재. (자바소스코드를 메모리에 로드)
로드 완료 시 실행 엔진(Execution Engine)이 런타임 데이터 영역에 적재된 바이트 코드 실행
5-1. 인터프리터를 통해 코드를 한 줄씩 기계어로 번역 및 실행
5-2. JIT Compiler(Just-In-Time Compiler)를 통해 바이트 코드 전체를 기계어로 번역 및 실행
Stack과 Heap
JVM 메모리 구조
Runtime Data Area : JVM에 Java 프로그램이 로드되고 실행될 때 정보를 담은 메모리 영역
Stack 영역
"Last In First Out" 마지막에 들어간 데이터가 가장 먼저 나오는 자료구조
Stack 작동
메서드 호출 시 메서드를 위한 공간인 Method Frame 생성.
메서드 내부에서 사용하는 다양한 값들이 임시로 저장
Method Frame이 Stack에 호출되는 순서대로 쌓임
Method 동작이 완료되면 역순 제거
Heap 영역
JVM에는 단 하나의 Heap 영역 존재, JVM 작동 시 자동 생성
new 키워드로 생성된 인스턴스가 생성되는 영역
Person person =newPerson();
Garbage Collection (GC)
프로그램에서 사용하지 않는 객체를 찾아 삭제 및 제거로 메모리를 확보
참조되고있지않은 객체 및 변수들을 검색하여 메모리 점유 해제로 메모리 공간 확보를 통한 효율적인 메모리 사용에 도움