>  기사  >  Java  >  Java 클래스 로딩 프로세스에 대한 자세한 소개

Java 클래스 로딩 프로세스에 대한 자세한 소개

不言
不言앞으로
2019-03-07 16:49:523132검색

이 기사는 Java 클래스 로딩 프로세스에 대한 자세한 소개를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

Java 파일의 인코딩부터 최종 실행까지의 과정:

  1. 컴파일: Javac은 Java 파일을 .class 파일로 컴파일합니다.
  2. Run: 실행을 위해 .class 파일을 JVM에 전달

클래스 로딩 프로세스

JVM 가상 머신은 .class 파일의 클래스 정보를 메모리에 로드하고 해당 클래스 객체를 구문 분석하고 생성하는 과정을 수행합니다. JVM은 처음부터 모든 클래스를 메모리에 로드하지 않고 처음으로 실행해야 하는 클래스를 발견할 때만 한 번만 로드합니다.

Java 클래스 로딩 프로세스에 대한 자세한 소개

Loading

클래스 로더를 통해 다양한 소스의 클래스 바이트코드 파일을 메모리로 로드합니다.
JVM은 세 가지 작업을 완료해야 합니다.

  1. 클래스의 정규화된 이름을 통해 이에 대한 정의를 가져옵니다. 바이너리 바이트 스트림.
  2. 정적 저장 구조 - > 메소드 영역의 런타임 데이터 구조
  3. 는 메소드 영역에서 이러한 데이터에 대한 액세스 입구 역할을 하는 Java 힙에 해당 클래스의 java.lang.Class 객체를 생성합니다.

클래스 로더

  • 클래스 로더 시작
  • 확장 클래스 로더
  • 앱 클래스 로더
  • 커스텀 클래스 로더

Connect

Java 클래스의 바이너리 코드를 JVM에 병합 실행 중인 상태의 프로세스

검증

로드된 바이트 스트림이 가상 머신 사양을 준수하고 보안 오류가 발생하지 않는지 확인

검증 분류

  • 상수 중 지원되지 않는 상수가 있는지 등 파일 형식 검증 ? 파일에 클래스가 final로 수정된 클래스를 상속하는지 여부와 같은 메타데이터 확인에 대한 비표준 또는 추가 정보가 있습니까? 클래스의 필드와 메소드가 상위 클래스와 충돌합니까? 불합리한 과부하가 있습니까?
  • 바이트코드 검증은 유형 변환의 합리성을 보장하는 등 프로그램 의미론의 합리성을 보장합니다.
  • 심볼 참조의 정규화된 이름을 통해 해당 클래스를 찾을 수 있는지 확인하는 등 심볼 참조 확인? 현재 클래스에서 기호 참조의 접근성(비공개, 공개 등)에 액세스할 수 있는지 확인하세요.
  • 준비

클래스 변수(인스턴스 변수 아님 참고)에 메모리를 할당하고 초기값(변수 유형에 따른 Java 가상 머신의 기본 초기값)을 할당합니다.

기본 초기값

8가지 기본 유형의 초기값 값, 기본값은 0
  • 참조 유형의 초기값은 null
  • 상수의 초기값은 코드에 설정된 값
  • final static tmp = 456
  • Analysis

상수 풀의 기호 참조는 직접 참조로 대체됩니다. 프로세스

기호 참조: 문자열이지만 이 문자열은 메서드, 변수, 클래스를 고유하게 식별할 수 있는 관련 정보를 제공합니다

직접 참조: 메모리 주소 또는 오프셋으로 이해됩니다. 가상 머신은 모든 클래스 이름, 메소드 이름, 필드를 결합합니다. 이러한 기호 참조를 특정 메모리 주소 또는 오프셋, 즉 직접 참조로 대체합니다.

초기화

클래스 변수(정적으로 수정된 변수 또는 명령문)의 초기화는 다음과 같은 과정입니다. 클래스 생성자 실행

초기화 프로세스

클래스를 초기화할 때 해당 상위 클래스가 아직 초기화되지 않은 경우 해당 상위 클래스가 먼저 초기화됩니다

- 여러 개의 정적 변수와 정적 코드 블록이 동시에 포함되어 있는 경우, 위에서 아래로 순서대로 실행됩니다

위 내용은 Java 클래스 로딩 프로세스에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제