자바 기반 ClassLoader 상세 설명

4187 단어 JavaClassLoader
1.ClassLoader 소개
ClassLoader 는 실행 할 때 자바 류 를 JVM 에 동적 으로 불 러 오 는 것 을 책임 지고 ClassLoader 는 JRE 의 일부분 입 니 다.따라서 ClassLoader 가 존재 하기 때문에 JVM 은 바 텀 파일 과 파일 시스템 을 알 필요 없 이 자바 프로그램 을 실행 할 수 있 습 니 다.
그리고 ClassLoader 는 모든 자바 류 를 메모리 에 한 번 에 불 러 오지 않 고 프로그램 이 필요 할 때 불 러 옵 니 다.이것 이 바로 ClassLoader 가 역할 을 하 는 곳 입 니 다.클래스 를 메모리 에 불 러 오 는 것 을 책임 집 니 다.
2.내 장 된 CLassLoader 의 유형
다음은 간단 한 예 입 니 다.클래스 가 어떤 ClassLoader 에 불 러 왔 는 지 보 여 줍 니 다.
Java中的ClassLoad
 위의 방법 을 실행 하면 인쇄 합 니 다:
Java中的ClassLoad
보시 다시 피 여 기 는 세 가지 다른 ClassLoader 가 있 습 니 다.AppClassLoader,ExtClassLoader 와 BootstrapClassLoader 입 니 다.BootstrapClassLoader 는 null 로 표 시 됩 니 다.이 는 BootstrapClassLoader 가 자바 코드 가 아 닌 이 컴퓨터 코드(C/C++로 작 성 됩 니 다.자체 가 JRE 의 일부분 입 니 다)이기 때문에 자바 류 로 표시 되 지 않 습 니 다.
AppClassLoader 는 위의 예제 방법의 클래스(Test)를 불 러 왔 습 니 다.AppClassLoader 는 우리 의 자바 류 를 클래스 경로 에 불 러 옵 니 다.
이 어 ExtClassLoader 는 Logging 류,ExtClassLoader 는 표준 핵심 자바 확장 류-%JAVA 를 불 러 왔 습 니 다.HOME%/jre/lib/ext 의 클래스 입 니 다.
마지막 으로 BootstrapClassLoader 는 ArrayList 클래스 를 불 러 왔 습 니 다.BootstrapClassLoader 는 모든 ClassLoader 의 부모 급 입 니 다.
3.BootstrapClassLoader
자바 류 는 자바.lang.ClassLoader 의 인 스 턴 스 로 불 러 옵 니 다.그러나 AppClassLoader 자체 가 자바 류 입 니 다.그래서 누가 AppClassLoader(java.lang.ClassLoader)를 불 러 옵 니까?
이것 이 바로 Bootstrap ClassLoader 가 역할 을 발휘 하 는 곳 입 니 다.
BootstrapClassLoader 는 JDK 내부 의 클래스,rt.jar 와%JAVA 를 불 러 옵 니 다.HOME%/lib 디 렉 터 리 의 다른 핵심 라 이브 러 리,ext 디 렉 터 리 는 확장 라 이브 러 리 입 니 다.그 밖 에 Bootstrap ClassLoader 는 다른 ClassLoader 인 스 턴 스 의 아버지 이기 도 합 니 다.
BootstrapClassLoader 는 JVM 의 일부분 으로 이 컴퓨터 코드(C/C++)로 작 성 됩 니 다.서로 다른 플랫폼 에서 서로 다른 실현 이 있 을 수 있 습 니 다.
4.ExtClassLoader
ExtClassLoader 는 BootstrapClassLoader 의 하위 클래스 로 표준 핵심 자바 확장 류 를 불 러 옵 니 다.JDK 의 확장 디 렉 터 리%JAVAHOME%/lib/ext/디 렉 터 리 나 환경 변수 java.ext.dirs 디 렉 터 리 에 대응 하 는 확장 클래스 를 불 러 옵 니 다.
5.AppClassLoader
AppClassLoader 는 모든 프로그램 급 클래스 를 JVM 에 불 러 옵 니 다.클래스 환경 변수 인 CLASSPATH 에 있 는 파일 을 불 러 옵 니 다.또한 ExtClassLoader 의 하위 클래스 입 니 다.
6.ClassLoader 는 어떻게 일 합 니까?
ClassLoader 는 JRE 의 일부분 입 니 다.JVM 이 클래스 를 요청 할 때 ClassLoader 는 이 종 류 를 찾 으 려 고 시도 하고 완전히 제 한 된 클래스 이름 을 사용 하여 이 종 류 를 불 러 옵 니 다.
java.lang.ClassLoader.loadclass()방법 은 로 딩 클래스 가 실 행 될 때 우선 완전히 제 한 된 클래스 이름 을 기반 으로 로 딩 클래스 를 시도 합 니 다.이 클래스 에 로 딩 되 지 않 으 면 부모 클래스 ClassLoader 에 위임 합 니 다.이 과정 은 재 귀적 으로 완 료 됩 니 다.
최종 적 으로 부모 클래스 ClassLoader 에서 이 종 류 를 찾 지 못 하면 하위 클래스 가 호출 됩 니 다.
java.net.URLClassLoader.findClass()방법 은 파일 시스템 에서 이 종 류 를 찾 습 니 다.마지막 하위 클래스 인 ClassLoader 도 이 종 류 를 불 러 올 수 없다 면 자바.lang.NoClassDeFoundeError 나 자바.lang.ClassNotFoundExcrption 이상 을 던 집 니 다.
자바.lang.ClassForName()을 호출 할 때 부터 부모 클래스 ClassLoader 를 통 해 이 종 류 를 불 러 오고 시도 합 니 다.
java.net.URLClassLoader.findClass()에서 class 자 체 를 찾 습 니 다.이런 종 류 를 찾 지 못 하 게 하면 Class NotFoundation Exception 이상 을 던 집 니 다.
ClassLoader 는 세 가지 중요 한 특성 을 가지 고 있 습 니 다.
7.의뢰 모델
ClassLoader 는 의뢰 모델 에 따라 이 모델 에서 요청 에 따라 클래스 나 자원 을 찾 습 니 다.ClassLoader 인 스 턴 스 는 클래스 나 자원 에 대한 검색 을 부모 급 ClassLoader 에 의뢰 합 니 다.
JVM 에 프로그램 클래스 를 불 러 오 라 는 요청 이 있다 고 가정 하면,AppClassLoader 는 이 클래스 의 불 러 오 는 것 을 부모 급 ExtClassLoader 에 의뢰 하고,부모 급 ExtClassLoader 는 BootstrapClassLoader 에 의뢰 합 니 다.
BootstrapClassLoader 와 ExtClassLoader 가 클래스 를 불 러 오지 못 했 을 때 만 AppClassLoader 는 클래스 를 불 러 옵 니 다.
8.class 유일 성
의뢰 모델 의 결과 로 클 라 스 의 유일 성 을 확보 하기 쉽다.왜냐하면 우 리 는 항상 위로 의뢰 를 시도 하기 때문이다.부모 클래스 ClassLoader 에서 이 종 류 를 찾 을 수 없다 면 현재 ClassLoader 인 스 턴 스 만 직접 불 러 옵 니 다.
9.가시 성
하위 클래스 ClassLoader 는 부모 클래스 ClassLoader 에 불 러 오 는 클래스 를 볼 수 있 습 니 다.
예 를 들 어 BootstrapClassLoader 가 불 러 온 클래스 는 ExtClassLoader 가 불 러 온 클래스 에 대해 가시 성 을 가지 고 있 으 며 반대로 도 마찬가지 입 니 다.
만약 AppClassLoader 가 클래스 A 를 불 러 왔 고,ExtClassLoader 가 클래스 B 를 불 러 왔 다 면,AppClassLoader 가 불 러 온 다른 클래스 에 서 는 A 와 B 를 볼 수 있 습 니 다.
그러나 ExtClassLoader 가 다른 종 류 를 불 러 오 는 데 있어 클래스 B 는 유일 하 게 볼 수 있 는 클래스 입 니 다.
자바 기반 의 ClassLoader 에 대한 자세 한 설명 은 여기까지 입 니 다.자바 ClassLoader 에 대한 자세 한 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기