자바 : class8 클래스 로딩, 링크 초기화 단계 세

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/qq_43336822/article/details/95599883

부하
1.java 파일 바이트 코드의 클래스 파일로 컴파일은 디스크에서 메모리에로드 된 바이트 코드 클래스이다.

2. 파일은 매직 넘버를 표시

3. 시스템은 클래스 로더를 제공합니다 :

①Boostrap 클래스 로더 : 부트 클래스 로더, 주요 JRE / lib 디렉토리 / re.jar로드는, 디렉토리 아래의 모든 병 패키지는 항아리를 실행하는 JVM이 필요합니다. PS 클래스 로더 자체 따라서, 자신의 클래스 로더가 최상위 부모 클래스 로더가 있어야합니다 분명, 다른 클래스 로더를 사용하기 전에로드 할 필요가 실제로 자바 클래스 (즉 BootstrapClassLoader는, 클래스 로더이다 다른 클래스 로더의 부모)은 C.입니다 개발했다. 클래스가 클래스 로더 BootstrapClassLoader 인 경우에 따라서, 다음 클래스 getClassLoader를 () 메소드는 null를 돌려줍니다.

②Extension 클래스 로더 (내선 클래스 로더) : 확장 클래스 로더는, 메인 코어는 JAVA 확장 클래스, 디렉토리 내선에서, 즉 JRE / lib 디렉토리 / jar 파일을로드됩니다.

③ApplicationClassLoader (AppClassLoader) : 응용 프로그램 클래스 로더는, 부하, 즉, CLASSPATH 경로에있는 모든 jar 파일의 클래스에서 응용 프로그램을 작성하는 주요 개발자이다.

4. 부모는 다음과 같은 과정을 위임 모델은 일
(1) 현재의 클래스 로더가 확인 원래 자신의 이미로드 된 클래스에서 이미로드 수준의 수익을로드 한 경우 등이로드되었는지 여부.
(2) 그렇지 않은 경우,로드 부모 클래스 로더를 위임로 이동합니다. 부모 클래스 로더는 그들이 반환 부팅 대리자 클래스 로더 때까지로드 상위 클래스를 의뢰하지 않은 클래스는 클래스를 포함하는로드되었는지 확인하기 위해 같은 전략을 사용합니다. 부모 클래스 로더가로드 부모 클래스 로더로 부팅 클래스 로더를 사용하는 대신, 비어있는 경우 때문입니다. (즉, String 클래스 로더가 null 볼 수)
슬로우됩니다 계속 실패, 그것은 AppClassLoader 사용을로드하는 데 실패 할 것, 부트 클래스 로더가로드 할 수없는 경우 (3)가로드하려고하는 확장 클래스 로더를 사용합니다 예외의 ClassNotFoundException.

5. 부모 위임 모델의 장점을 사용 :
(1) 사용자가 작성한 Java 클래스에 대한 보안은 동적으로 일부 핵심 클래스를 대체합니다. 부모가 작동로드 클래스에 대한 위임 모델을로드 사용하지 않을 경우, 우리는 동적으로 API에 정의 된 핵심 자바 클래스를 대체하기 위해 언제든지 사용자 정의 클래스를 사용할 수 있습니다. 예를 들어 String 클래스 정의에서 다음 클래스 로더 중 String 클래스에 해커 "바이러스 코드의"사용자 정의 임플란트는 JVM에로드 된 경우, 다음 시간이 JVM에 예상치 못한 "바이러스"를 생성합니다. 그리고 String 클래스가 시작할 때 되었기 때문에, 부모가이 상황을 피할 수 위임이로드는 부트 스트랩 클래스 로더를로드하기 위해 실시된다.
JVM이 두 클래스가 동일 클래스인지를 판정하기 때문에 (2) 반복 하중 클래스를 피하고, 또한 클래스 로더, 클래스 로더의 클래스를로드 할 수 있는지 여부를 결정하기 위해 동일한 동일하며, 필요한 클래스 여부 동일한 이름에 따라 결정되지만 클래스 파일은 두 개의 서로 다른 클래스에서 얻어진 서로 다른 클래스 로더의 결과이다.

두 클래스는 동일한 클래스 로더의 두 개의 클래스가 전제이다 같다.

둘째로, 링크 단계는
(1) 유효성 : 현재 바이트 코드 파일은 가상 머신의 요구 (매직 번호, 버전 번호 ......)에 부합
(2) 준비 : 상기 방법에서의 초기 값 할당 유형 클래스 변화 메모리 영역을 개방
(3 ) 분석 : 스테이지를 분석하는 직접 참조를 대체하는 과정을 참조 기호 상수 풀 가상 머신이다.

셋째, 초기화
클래스 변수 할당에

추천

출처blog.csdn.net/qq_43336822/article/details/95599883