우리가 작성한 Java 코드, 즉 .java file은 java 컴파일러인 javac에 의해서 확장자가 .class인 바이트 코드로 변환된다.
이 바이트코드를 JVM 내의 Class Loader가 읽어들이고 메모리에 배치하는데, 클래스를 읽어와(Loading) 레퍼런스에 연결(Linking)하고, Static 변수 초기화 및 변수 할당(Initialization)의 과정을 거친다.
Class Loader에 의해 배치된 바이트 코드는 Execution Engine에 의해 실행되고, 실행 엔진은 이를 줄 단위로 읽어서 수행한다.
Garbage Collecter는 객체의 사용여부를 판단하고 사용되지 않는 객체를 자동적으로 해제시키는 역할을 수행한다.
Runtime Data Areas는 총 6개의 영역으로 구분된다.
- Method(static) Area : 가상 머신이 읽은 클래스와 인터페이스 상수에 대한 Runtime Constant Pool과 메소드 및 필드, 그리고 Static 변수와 메소드 바이트 코드 등을 저장하는 영역
- Runtime Constant Pool : Method Area 내부에 있지만 클래스와 인터페이스 상수, 메소드 및 필드에 대한 모든 레퍼런스를 저장하는 영역으로 구분된다. 가상머신은 이 곳에서 해당하는 메소드 및 필드의 실제 주솟값을 찾는다.
- Heap Area : new 명령어로 생성된 객체나 인스턴스, 배열 등이 저장되는 공간, 즉 동적으로 할당된 값들이 저장된다.
- Stack Area : FILO 구조로 이루어져 있으며, Heap Area에 저장된 객체들의 레퍼런스 값이나 원시타입의 지역변수의 실제값이 할당된다.
- PC register : 가상 머신의 명령어 주소값을 가지고 있는 저장장치
- Native Method Stack Area : Java 이외의 언어로 작성된 코드를 실행할 때 할당되는 영역
'공부 > Java' 카테고리의 다른 글
[Java] Final Keyword (0) | 2022.02.22 |
---|---|
[Eclipse] JDK 버전 변경 후 기존 프로젝트 오류 발생 시 해결 방법 (2) | 2021.12.07 |
[Java] Throws 구문 (0) | 2021.12.06 |