약간 클래스 로더를 상담

로드 클래스 :

   클래스는 자바 가상 머신 명령의 문서가 필요 클래스, 가상로드 명령어 함유 된 .class 파일을 사용하는 경우, 컴파일 java.lang.Class의 대상 객체 인스턴스에 대응하는 클래스로 변환하고있다 메모리, 프로세스는 클래스 로더를했다.

클래스 로딩 과정 :

   부하 (로드) -> 링크 (연결) -> 초기화 (초기화)

  어떤 또한 링크 확인 (검증) 포함 -> 준비 (준비) -> 구문 분석 (해상도) 세 개의 링크를

클래스 로더 :

  (부트 스트랩) / 확장 (확장) / 응용 프로그램으로 시작 (APP) 세 가지 유형 로더

  시작 클래스 로더 : C에 의해 구현은 ++, 최상위 클래스 로더로드는 메인 클래스는 메모리의 경로를 지정 % JAVA_HOME % / lib 디렉토리 아래에 -Xbootclasspath에서 핵심 라이브러리 또는 라이브러리를로드에 대한 책임을 자신의 JVM을 필요로

  확장 클래스 로더 : 자바 구현 실행기 내부 정적 클래스입니다로드에 대한 책임 % JAVA_HOME % / lib 디렉토리 / 내선 라이브러리에 의해 지정 또는 라이브러리 -Djava.ext.dir

  응용 프로그램 클래스 로더 (시스템 클래스 로더) : 현재 클래스의 클래스 경로의 모든로드

부모 위임 :

  작동 원리 : NEET 클래스 로더, 그것은 안티 아버지에게 일어난 아들은 나쁜 사람이 내 아버지를 찾을 수 싸움. 당신이 클래스 로더 클래스 로더의 요청이있는 경우, 먼저 자신의 부모 클래스 로더를 찾아 주소가 자기 아버지의 아버지가 자신의 할아버지가 살아 또한 경우 그는 우선 순위를 부여하지 않습니다 그는 아버지에게 자신의 할아버지를 찾아 낼 것입니다 당신이 아버지가 클래스 로딩의 작업을 완료 할 수있는 경우 맨 위의 상위 클래스 로더가 시작됩니다 찾을 때까지 문제를 해결, 모든이 잘 마무리되지 않을 경우, 본격적으로 아버지이 시간 것이라고 그의 아들 말했다 :이 아빠가 당신을 도울 수있는 일이다, 당신은 자체적으로 해결. 아들 층으로 다시 층을 던지고, 클래스 로더에 다시 발생합니다.

  장점 : 자신의 클래스 로더 클래스는 반복 하중 클래스를 피하기 위해 우선 순위 계층 관계 함께이 있습니다. 아버지, 아들처럼 앉아서 즐길 수, 일을 해결했다 해결 될 필요가 없습니다.

   개발자가 쉽게 핵심 API를로드하는 클래스 로더를 정의 할 경우 상상, 각 클래스 로더 기본 클래스의 동의 해결이 재앙이 아니다?

   한마디로 : 두 지점의 이점은로드 1, 2, 더 안전한 반복하지 않도록합니다 .

사용자 정의 클래스 로더 :

  클래스 로더 상속의 ()에 (때문에) findClass ().에 FindClass 전화 defineClass는 재 작성.

  클래스 로더 몇 가지 중요한 방법 :

방법 설명
의 getParent () 부모 클래스 로더 클래스 로더를 돌려줍니다.
로 loadClass (문자열 이름) 이름으로 클래스 이름을로드, 반환 결과는 java.lang.Class 클래스의 인스턴스입니다.
(때문에) findClass (문자열 이름) 클래스의 이름에 대한 이름을 찾고, 반환 결과는 java.lang.Class 클래스의 인스턴스입니다.
findLoadedClass (문자열 이름) 이미로드했던 클래스의 이름에 대한 이름을 찾고, 반환 결과는 java.lang.Class 클래스의 인스턴스입니다.
defineClass는 (문자열 이름 바이트 [] B 오프 INT, INT LEN) 자바 클래스 B 바이트 배열로 콘텐츠를 변환, 반환 된 결과는 java.lang.Class 클래스의 인스턴스이다. 이 방법은 마지막으로 선언됩니다.

 

  

  

  

추천

출처www.cnblogs.com/virgoman/p/11842684.html