클래스 로더
역할 클래스 로더 - 택배
분류 클래스 로더
추상 클래스 클래스 로더 로더 유무는 사용자 정의 클래스 로더가 보내 년생.
[이미지 소스 스테이션 보안 체인 메커니즘을 가질 수있다, 체인이 실패 덤프, 직접 업로드 아래 그림을 저장하는 것이 좋습니다 (IMG-KRDpyB3F-1581505064618) (EN-자원 : // / 2941 데이터베이스 : 1)]
- 부트 클래스 로더 (부트 스트랩 클래스 로더 부트 스트랩 클래스 로더)
- 는 C ++ 언어의 JVM 내부의 둥지.
- 자바 코어 라이브러리를로드하는 데 사용, JVM 클래스는 자신의 필요에 따라 제공합니다.
- 에서 상속하지
java.lang.ClassLoader
없이 부모 클래스 로더. - 클래스와 응용 프로그램 클래스 로더를 확장로드, 부모 클래스 로더에 할당합니다.
- 부하에 부트 스트랩 시작 클래스 로더 단지
java, javax, sun
등 클래스의 시작,
- 확장 클래스 로더 (증축 클래스 로더)
- 자바로 작성된, 파생 클래스의 클래스 로더
- 부팅에 부모 클래스 로더 클래스 로더
- jre / lib / ext 디렉토리에있는 라이브러리를로드하면이 디렉토리에있는 사용자 정의 라이브러리되면로드 될
- 시스템 클래스 로더 (응용 프로그램 클래스 로더, AppClassLoader)
- 클래스 로더는 확장 클래스 로더 클래스, 부모 클래스 로더를 도출
- 로딩 환경 변수에 대한 책임
classpath
이나 시스템 속성을java.class.path
지정된 경로에 라이브러리
클래스를로드
1.로드
[이미지 소스 스테이션 보안 체인 메커니즘을 가질 수있다, 체인이 실패 덤프, 직접 업로드 아래 그림을 저장하는 것이 좋습니다 (IMG-XFUt0lPH-1581505064639) (EN-자원 : // / 2939 데이터베이스 : 1)]
- 전체 바이너리 바이트 스트림에 의해 정의 된 클래스의 클래스 이름을 얻으려면
- 정적 저장 구조는 메소드 영역 런타임 데이터 구조로 바이트 스트림으로 표현
- 메모리에 이러한 종류의 대표 생성
java.lang.Class
클래스의 입구의 데이터 액세스 영역의 다양한 방법으로, 개체
PS : 부하 .class
논문
- 로컬 시스템에서 직접로드
- 예를 들어, 네트워크, 웹 애플릿을 통해 사용 가능
- 이러한 파일 항아리 또는 전쟁으로 압축 읽기
- 계산하여 실행 시간, 예를 들어, 동적 프록시를 생성
- 에 의해 생성 된 다른 문서, 예를 들어, JSP 응용 프로그램
2. 링크
-
(확인) 확인
하기 위해 그 결과java.lang.Class
가상 머신의 요구 사항을 만족하는 개체. 상기 상징적 참조의 검증 파일 포맷, 메타 데이터 유효성 검사, 바이트 코드 검증, 검증을. -
준비 (준비)
- 클래스 변수를 메모리에 할당하고, 설정 초기 클래스 변수, 즉, 0 값의 기본값 .
- 컴파일시 준비의 마지막 단계가 명시 적으로 초기화가 할당 된 것이기 때문에 여기가 정적 최종 수정을 포함하지 않습니다,
- 아니 인스턴스 변수 할당 초기화 클래스 변수는 프로세스 영역에 할당 의 인스턴스 변수는 힙에 할당 한다.
-
구문 분석 (해결)
- 부호 직접 참조로 상수 풀
3. 초기화
- 초기화 단계 방법은 구현 클래스의 생성자입니다
<clinit>()
절차 - 이 방법은 자동으로 모든 클래스와 코드 블록에서 명령문의 정적 변수를 수집 결합 javac의 컴파일러 클래스를 지정하는 경우로 정의를 필요로하지 않습니다.
- 생성자 방법 문은에서 소스 파일에 지침의 순서로 나타납니다
<clinit>()
클래스 생성자와 달리, 각 JVM을 보는 클래스 생성자를 보는 것은<init>()
- 가상 머신이 클래스 있는지 확인해야합니다
<clinit>()
방법은 다중 스레드에 잠겨 동기화
부모 위임 메커니즘
수요에로드 된 자바 가상 머신 클래스의 사용 파일은 클래스가 메모리에 생성 된 객체에로드되는 클래스 파일 형식을 사용해야합니다 때 방법입니다.
부모 위임 모델, 부모 프로세스, 즉 작업을 사용하여 클래스 파일의 클래스를로드 할 때.
원칙
- 클래스 로더가로드하는 클래스가 요청을받은 경우, 그것은 자신의 부하로 이동되지 않지만 수행 할 수있는 부모 클래스 로더에 요청을 위임 할 수 있습니다.
- 부트 클래스 로더의 상단까지 더 위쪽으로 부모 클래스 로더의 상위 클래스 로더, 다음, 대리인이있는 경우.
- 부모 클래스 로더가로드 작업을 완료 할 경우 성공적으로 반환;하지 완성 로딩 작업, 자식 클래스 로더가로드하려고 시도합니다.
[이미지 소스 스테이션 보안 체인 메커니즘을 가질 수있다, 체인이 실패 덤프, 직접 업로드 아래 그림을 저장하는 것이 좋습니다 (IMG-NTLOrndR-1581505064641) ( EN-자원 : // 데이터베이스 / 2943 : 1)]
두 객체가 같은 클래스입니다 의 클래스에 대한 두 가지 필요 조건
- 클래스의 전체 클래스 이름은 패키지 이름을 포함, 동일해야합니다.
- 이 클래스의로드 ClassLoader 인스턴스 객체는 동일해야합니다.
우월
- 반복 방지 부하 클래스
- 핵심 API를 방지하기 위해 보호기 보안 수정되었습니다
SPI 인터페이스 클래스 로딩
- 로드 인터페이스 코어의 rt.jar 부트 스트랩 클래스 로더 부하를
- 사용하여 특정 범주 시스템 클래스 로더 ( AppClassLoader )로드
[이미지 소스 스테이션 보안 체인 메커니즘을 가질 수있다, 체인이 실패 덤프, 직접 업로드 아래 그림을 저장하는 것이 좋습니다 (IMG-UTsXdVGR-1581505064643) (EN-자원 : // / 2945 데이터베이스 : 1)]
클래스의 능동 및 수동 사용을 사용하여
활성 사용
- 클래스의 인스턴스를 생성
- 클래스 또는 인터페이스 또는 정적 변수 할당의 액세스 정적 변수
- 정적 메소드 호출 클래스
- 반사
- 클래스의 서브 클래스를 초기화
- Java 가상 머신 클래스의 시작 클래스로 분류되기 시작하면
- 동적 언어 지원 제공 JDK7 시작
활성 사용
이 일곱 종류 또한, 수동 사용하는 모든 클래스,하지 않습니다 클래스 초기화 원인