The Java Manipulation(3)
섹션 3. 클래스 로더(Class Loader)
클래스 로더
- 로딩, 링크, 초기화 순으로 진행된다.
- 로딩(Loading)
- 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 “메소드” 영역에 저장.
- 이때 메소드 영역에 저장하는 데이터
FQCN(Fully Qualified Class Name) : 클래스가 속한 패키지명을 모두 포함한 이름을 말한다.
//Fully Qualified Class Name) 예시 //일반 표현 String s = new String(); //FQCN방식 표현 java.lang.String s = new java.lang.String();
Class Interface Enum - 메소드와 변수
- 로딩이 끝나면 해당 클래스 타입의 Class객체를 생성하여 “힙” 영역에 저장한다.
- 링크(Link)
- Verify, Prepare, Resolve(optional) 세 단계로 나뉘져 있다.
- 검증 : .class 파일 형식이 유효한지 체크한다.
- Preparation : 클래스 변수(static 변수)와 기본값에 필요한 메모리
- Resolve: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.
- 초기화(initialization)
- Static 변수의 값을 할당한다.(static 블럭이 있다면 이때 실행된다.)
- 클래스 로더는 계층 구조로 이뤄져 있으면 기본적으로 세 가지 클래스 로더가 제공된다.
- 부트 스트랩 클래스 로더
- JAVA_HOME\lib에 있는 코어 자바 API를 제공한다. 최상위 우선순위를 가진 클래스 로더
- 플랫폼 클래스 로더
- JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽는다.
- 애플리케이션 클래스 로더
- 애플리케이션 클래스패스(애플리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치)에서 클래스를 읽는다.
- 부트 스트랩 클래스 로더
- 백기선님의 The Java code Manipulation 강의 중.