-
3. 클래스 로더프로그래밍언어/Java(중급) 2020. 3. 26. 15:45
클래스 로더
-
로딩, 링크, 초기화 순으로 진행된다.
-
로딩
-
클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 “메소드” 영역에 저장.
-
이때 메소드 영역에 저장하는 데이터
-
FQCN (Fully Qualified Class Name)
-
클래스 | 인터페이스 | 이늄
-
메소드와 변수
-
-
-
로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 “힙" 영역에 저장.
-
링크
-
Verify, Prepare, Reolve(optional) 세 단계로 나눠져 있다.
-
검증: .class 파일 형식이 유효한지 체크한다.
-
Preparation: 클래스 변수(static 변수)와 기본값에 필요한 메모리를 준비하는 과정
-
Resolve: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.(optional)
-
-
초기화
- Static 변수의 값을 할당한다. (static 블럭이 있다면 이때 실행된다.)
-
클래스 로더는 계층 구조로 이뤄져 있으면 기본적으로 세가지 클래스 로더가 제공된다.
-
부트 스트랩 클래스 로더 - JAVA_HOME\lib에 있는 코어 자바 API를 제공한다. 최상위 우선순위를 가진 클래스 로더
-
플랫폼(Extension) 클래스로더 - JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽는다.
-
애플리케이션 클래스로더 - 애플리케이션 클래스패스(애플리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치)에서 클래스를 읽는다.
-
- 제일 부모가 우선 적으로 읽는다.
- 아무도 읽지 못할시에 ClassNotFoundException Error (의존성 추가 문제)
'프로그래밍언어 > Java(중급)' 카테고리의 다른 글
6. Spring에서 바이트 코드 조작 활용 예 (0) 2020.03.26 5. 바이트코드 조작마술 (0) 2020.03.26 4. 바이트코드 조작 (0) 2020.03.26 2. JVM 구조 (0) 2020.03.26 1. JDK, JVM, JRE 이해하기 (0) 2020.03.26 -