
클래스 로더 시스템
- .class 파일에서 바이트 코드를 읽고 메모리에 저장
- 로딩 : 클래스를 읽어오는 과정
- 링크 : 레퍼런스를 연결하는 과정
- 초기화 : static 값 초기화 및 변수에 할당
메모리
- 메서드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장
- 힙 영역에는 객체를 저장(공유 자원)
- 스택 영역에는 스레드마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라 부르는 블록으로 적재
- 스레드 종료 시 런타임 스택도 소멸
- PC(Program Counter) 레지스터, 네이티브 메서드 스택 : 스레드마다 독립적으로 소유
실행 엔진
- 인터프리터 : 바이트 코드를 한 줄씩 실행
- JIT(Just-In-Time) 컴파일러 : 인터프리터의 효율을 높이기 위해 사용
- 인터프리터가 반복되는 코드 발견
- JIT 컴파일러로 반복되는 코드를 전부 네이티브 코드로 변경
- 인터프리터는 변경된 네이티브 코드를 바로 사용
- GC(Garbage Collection) : 더 이상 참조되지 않는 객체를 모아서 정리
JNI (Java Native Interface)
- 자바에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
- native 키워드를 사용
- 네이티브 메서드 라이브러리 : C, C++로 작성된 라이브러리
Reference
'Java' 카테고리의 다른 글
| [Java] Java 8의 특징(3) - Stream (0) | 2022.02.23 |
|---|---|
| [Java] Java 8의 특징(2) - 기본 메서드와 스태틱 메서드 (0) | 2022.02.22 |
| [Java] Java 8의 특징(1) - 함수형 인터페이스와 람다 (0) | 2022.02.21 |
| [Java] 클래스 로더 (0) | 2022.02.15 |
| [Java] 자바, JVM, JDK, JRE (0) | 2022.02.15 |