728x90
- 개발자가 .java 자바 소스코드를 생성한다.
- 자바 컴파일러에 의해 .java가 컴파일되어 .class 파일로 아직 컴퓨터가 읽을 수 없는 상태인 Java bytecode로 만든다.
- 컴파일된 변환 코드를 JVM의 Class Loder로 전달한다.
- Class Loader는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area에 올린다.
- 클래스 로더의 세부 동작
- 로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드한다.
- 검증 : 자바 언어 명세 및 JVM 명세에 명시된 대로 구성되어 있는지 검사한다.
- 준비 : 클래스가 필요로 하는 메모리에 할당한다.
- 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다.
- 초기화 : 클래스 변수들을 적절한 값으로 초기화한다. (static 필드)
- 클래스 로더의 세부 동작
- 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행시킨다. 이 때, 실행 엔진은 두가지 방식으로 변경한다.
- 인터프린터
- 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행한다.
- 하나하나의 실행은 빠르나, 전체적인 속도는 느리다.
- JIT 컴파일러
- 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에 바이너리 코드로 직접 실행
- 전체적인 실행속도가 인터프리팅 방식보다 빠르다.
- 인터프린터
-Reference
'Java' 카테고리의 다른 글
대용량 요청 시 API limit (0) | 2022.03.15 |
---|---|
제네릭 타입소거 (Generic type Erasure) (0) | 2021.11.07 |
[JAVA] Wrapper Class와 일급 컬렉션 (0) | 2021.10.17 |
[JAVA] Lambda와 Stream (0) | 2021.10.09 |
[JAVA] 이것저것.. (0) | 2021.08.19 |