Java
[Java] 클래스 로더
재담
2022. 2. 15. 22:59

클래스 로더
- 로딩 -> 링크 -> 초기화 순으로 진행
- 계층 구조
- 부트 스트랩 클래스 로더 : JAVA_HOME\lib에 있는 코어 자바 API 제공하며 최상위 우선순위
- 플랫폼 클래스 로더 : JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 환경 변수에 해당하는 위치에 있는 클래스를 읽음
- 애플리케이션 클래스 로더 : -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치에 있는 클래스를 읽음
로딩
- 클래스 로더가 .class 파일을 읽고 내용에 따라 적절한 바이너리 데이터 생성 후 메서드 영역에 저장
- 메서드 영역에 저장하는 데이터
- FQCN(Fully Qualified Class Name) : 패키지 이름 + 클래스 이름 (+클래스 로더)
- 클래스, 인터페이스, Enum
- 메서드, 변수
- 로딩 종료 후 해당 클래스 타입의 Class 객체를 생성하여 힙 영역에 저장
링크
- Verify -> Prepare -> Resolve(optional)
- Verify : .class 파일 형식이 유효한지 체크
- Prepare : 클래스 변수(static 변수)와 기본값에 필요한 메모리
- Resolve(optional) : 심볼릭 메모리 레퍼런스를 메서드 영역에 있는 실제 레퍼런스로 교체
초기화
- static 변수의 값을 할당 (static 블록이 있다면 실행)