자바 클래스 로딩 메커니즘 - 클래스로드 (부하)

Java 가상 머신 클래스를로드의 전 과정은 다음과 같습니다 : 로드, 검증, 준비, 해상도, 초기화 . 연결 프로세스를 해결하기 위해 호출 확인, 준비,. 오늘 우리는로드에 대해 말하고있다.
먼저 분명히 "로드"프로세스의 "클래스 로더"입니다, 혼동하지 않습니다. 로드 프로세스는 가상 기계는 다음과 같은 세 가지 일을 할 필요가있다 :

  1. 클래스의 완전한 이름으로 정의 같은 바이너리 바이트 스트림을 획득하는 단계;
  2. 이 바이트 스트림에있어서 실행 영역에 저장된 데이터 구조에 고정 구조를 나타내고;
  3. 메모리의 생성이 클래스의 각종 데이터 입력 영역에 액세스하는 방법으로서,이 클래스의 java.lang.Class의 개체를 나타낸다.

이 세 가지 요구 사항은 특정 응용 프로그램이 매우 큰 특정 가상 머신, 가상 머신의 구현과 유연성이 아니다. "클래스의 완전한 이름을 통해 이러한 바이너리 바이트 스트림의 정의를 얻을 수있다"고 만 할 필요가있는 첫번째을 가지고 클래스 파일 인수에 바이너리 바이트 스트림을 지정하지 않습니다에서 가져 오는 방법을 말하지 않았다 어디를 얻을 수 있습니다. 그래서 자바 가상 머신의 디자인 팀은 같은이 분야에 설립 된 매우 광범위한 단계의 하중 단계, 많은 중요한 자바 기술에서 설정 :

  • 기초 항아리, 전쟁 포맷 인 ZIP 패키지에서 획득
  • 네트워크에서 획득이 시나리오는 일반적인 응용 프로그램 애플릿입니다
  • 계산하여 런타임 생성이 가장 역동적 인 프록시 기술이를 java.lang.reflect.Proxy에서,이 시나리오에 사용되는, 특정 양식의 바이너리 ProxyGenerator.generateProxyClass 프록시 클래스 "* $ 프록시"인터페이스 생성을 사용하는 것입니다 바이트 스트림
  • 다른 파일에서 생성 된 전형적인 시나리오는 Class 클래스에 해당하는 생성 된 JSP 응용 프로그램, 즉 JSP 파일입니다
  • 데이터베이스에서 읽기,이 시나리오는 상대적으로 드문

클래스 로딩 과정의 다른 단계에 대하여, 비 부하 위상 어레이 클래스 (정확하게는,로드 상 획득 동작은, 일부 적재 스테이지 이진 바이트 스트림은 사용할 수없는 바이트의 이진 스트림)은 제어 가능한 현상이며 부트 스트랩 클래스 로더의 로딩 단계는 전체 시스템을 제공하는 데 사용될 수 있기 때문에, 강한는, 사용자 정의 된 클래스 로더를 완료 할 수 있으며, 개발자는 그 자신의 클래스 로더를 정의하여 상기 제어 바이트를 획득하기 위해 흐를 수있다 정보 (즉, 클래스 loadClass 메소드를 재정의).

배열 클래스의 경우, 서로 다른 상황. 클래스 로더를 생성하지 않습니다 자체 Array 클래스, 그는 자바 가상 머신에서 직접 만들었습니다. 배열 요소 타입 클래스는 최종적으로 (C라고 아래) 배열 클래스를 생성하는 클래스 로더에 의존 (전체 치수를 제거 배열 유형으로 지칭)을 생성 과정을 따르기 때문에 그러나 클래스 및 클래스 로더의 모든 천연 배열 사이의 관계는 매우 가까운 다음과 같은 규칙 :

  • 어레이의 구성 유형 (한 치수를 제거 어레이 유형을 참조) 경우, 기준 종류, 유형, 배열 것이다 C 클래스 로더 조립체 컴포넌트 타입을로드 정의 본 장착부의 후 반복적 사용은 클래스 이름 공간이 식별됩니다 (이 중요합니다, 당신은 클래스 로더 클래스의 고유성을 결정해야합니다)
  • 컴포넌트 타입이 배열 참조 형이 아닌 경우, Java 가상 머신이 표시된 C 부트 스트랩 클래스 로더 어레이 (예를 들어, [] 배열 INT)와 연관된
  • 그의 일관된 가시성 구성 요소 유형과 가시성 배열 클래스, 구성 요소 유형은 참조 유형, 대중에게 기본 것이다 배열 클래스의 가시성이 아닌 경우

적재 스테이지 포맷 영역에있어서의 가상 머신을 저장하는데 필요한 바이트의 이진 스트림에있어서, 외부의 가상 머신을 완료하면, 영역에있어서의 가상 머신 자체 정의 데이터 저장 포맷을 구현 가상 머신 사양이 소정의 범위 내에 있지 않는 특정 데이터 구조. 그런 다음 메모리에 java.lang.Class 클래스의 개체를 인스턴스화 (명확하게 해당 핫스팟 가상 머신의 자바 힙에 정의되지 않은 클래스 객체는 그 객체가 있지만, 오히려 특별하지만, 메소드 영역에) 이러한 유형의 데이터의 프로그램 영역으로서,이 오브젝트의 외부 인터페이스 액세스 방법.
로드 단계 및 연결 단계의 일부 (예를 들어, 파일 포맷 바이트 코드 검증 동작의 일부)에 연결 단계가 시작될 수 로딩 단계가 완료되지 않았 횡단 수행되지만의 후 일부 동작의 로딩 단계에서 클램프 연결 단계의 내용은 다음 두 단계 중 임의의 시작 시간은 고정 된 순서를 유지한다.

추천

출처blog.csdn.net/huqianlei/article/details/90734570