728x90
JVM의 클래스로더에 대해 조금 더 자세히 정리하려고 한다
JVM에서의 클래스 로더(Class Loader)의 역할
- JAVA 컴파일러(javac)를 통해 변환된 Class 파일(바이트 코드)을 읽어서 메모리에 배치
클래스 로더 실행 순서
- 실행 순서는 로딩, 링크, 초기화 순으로 이루어 진다
로딩(Loading)
- .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 메소드 영역에 저장
- 메소드 영역에 저장하는 데이터 종류
- Class
- Interface
- Enum
- FQCN(Fully Qualified Class Name)
(object, 함수, 변수의 계층적 구조를 모두 포함하여 표현하는 것. Java의 경우 클래스가 포함된 패키지를 의미함)
String str = new String();
// FQCN
java.lang.String str = new java.lang.String();
- 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 힙 영역에 저장
링크(Link)
Verify, Prepare, Reolve(optional) 세 단계로 이루어짐
- Verify
- class 파일 형식이 유효한지 체크
- Preparation
- 클래스 변수(static 변수)와 기본값에 필요한 메모리 할당
- Resolve
- 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체
초기화(Initialization)
- Static 변수의 값을 할당 (static 블럭이 있다면 이때 실행됨)
클래스 로더의 종류
- Bootstrap Class Loader
- JAVA_HOME\lib에 있는 코어 자바 API를 제공. 최상위 우선순위를 가진 클래스 로더
- Platform Class Loader (Extension Class Loader)
- JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽음
- Application Class Loader
- -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치에 있는 클래스를 읽음
728x90
'개발 지식 > JAVA 기본 지식' 카테고리의 다른 글
JavaBeans (0) | 2022.01.25 |
---|---|
POJO(Plain Old Java Object) (0) | 2022.01.24 |
OOP(Object Oriented Programming 객체 프로그래밍) 정리 (0) | 2022.01.24 |
매번 까먹는 JVM 정리 (0) | 2022.01.22 |