1. 클래스 로딩 메커니즘
은 로딩, 검증, 준비, 구문 분석, 초기화, 사용 및 언로딩으로 구분됩니다.
(1) 로딩
하드디스크를 검색하여 IO를 통해 바이트코드 파일을 읽는다. 클래스의 main() 메소드 호출, 새로운 객체 호출 등 클래스를 사용할 때 로딩된다. 로딩 단계에서는 이 클래스를 나타내는 java.lang.Class 객체가 메모리에 생성되고 메소드 영역에서 이 클래스의 다양한 데이터에 대한 액세스 지점 역할을 합니다.
(2) 확인
바이트코드 파일이 올바른지 확인하세요.
(3) 클래스의 정적 변수에 메모리를 할당하고 기본값을 할당할 준비를
합니다.
(4) 분석
기호 참조를 직접 참조로 대체합니다. 이 단계에서는 일부 정적 메서드(main() 메서드와 같은 기호 참조)가 데이터가 저장된 메모리를 가리키는 포인터나 핸들로 대체됩니다( 이는 소위 정적 연결 프로세스입니다(클래스 로딩 중에 완료됨). 동적 연결은 다음 강의에서 기호 참조를 대체하여 프로그램이 실행되는 동안 완료됩니다.
(5) 초기화
2. 상위 위임 메커니즘
은 클래스의 정적 변수를 지정된 값으로 초기화하고 정적 코드 블록을 실행합니다.
애플리케이션 클래스 로더 AppClassLoader는 클래스의 상위 위임 메커니즘 소스 코드를 로드합니다. AppClassLoader의 loadClass 메소드는 결국 상위 클래스 ClassLoader의 loadClass 메소드를 호출합니다.
먼저 확인하세요. 지정된 이름의 클래스가 로드되었는지 여부 로드된 경우 다시 로드하고 직접 반환할 필요가 없습니다.
이 클래스가 로드되지 않은 경우 상위 로더가 있는지 확인하세요. 상위 로더가 있으면 상위 로더에 의해 로드됩니다(즉, parent.loadClass(name, false); 호출). 또는 로드하려면 부트스트랩 클래스 로더를 호출하세요.
부모 로더와 부트스트랩 클래스 로더 모두 지정된 클래스를 찾지 못하면 현재 클래스 로더의 findClass 메서드가 호출되어 클래스 로딩을 완료합니다.
3. 전적인 책임 위임 메커니즘
"전적인 책임"은 ClassLoder가 클래스를 로드할 때 다른 ClassLoder가 명시적으로 사용되지 않는 한 클래스가 의존하는 클래스와 참조도 이 ClassLoder에 의해 로드됨을 의미합니다.
위 내용은 Java에서 JVM의 다양한 메커니즘은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!