>  기사  >  Java  >  Java 클래스 로딩 메커니즘이란 무엇입니까?

Java 클래스 로딩 메커니즘이란 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-05-21 18:20:4318220검색

이 문서에서는 Java의 클래스 로딩 메커니즘 단계를 소개합니다. 다음 세부 정보를 참조하세요.

Java 클래스 로딩 메커니즘이란 무엇입니까?

클래스 로딩 메커니즘

클래스가 가상 머신 메모리에 로드되는 시점부터 메모리에서 언로드되는 시점까지 전체 수명 주기에는 로딩, 검증, 준비), 해결, 초기화, 사용 및 언로드. 검증, 준비 및 구문 분석의 세 부분을 총칭하여 연결이라고 합니다. 이 7단계의 순서는 아래 그림과 같습니다. 초기화 프로세스가 트리거됩니다(이 전에 로드, 확인 및 준비가 시작되어야 함)

1) new, getstatic, putstatic 또는 Invokestatic의 네 가지 바이트코드 명령어가 발생할 때 클래스가 초기화되지 않은 경우 이를 트리거해야 합니다. 첫 번째 초기화. 이러한 네 가지 명령어를 생성하는 가장 일반적인 Java 코드 시나리오는 다음과 같습니다. new 키워드를 사용하여 객체를 인스턴스화하는 경우, 클래스의 정적 필드를 읽거나 설정하는 경우(final에 의해 수정되고 상수 풀에 추가된 정적 필드는 제외) 컴파일러)) 및 클래스의 정적 메서드를 호출할 때. Java 클래스 로딩 메커니즘이란 무엇입니까?

2) java.lang.reflect 패키지의 메소드를 사용하여 클래스에 대한 반사 호출을 수행할 때 클래스가 초기화되지 않은 경우 해당 초기화가 먼저 트리거되어야 합니다.

3) 클래스를 초기화할 때 해당 상위 클래스가 초기화되지 않은 경우 상위 클래스 초기화를 트리거해야 합니다.

4) 가상 머신이 시작되면 사용자는 실행할 메인 클래스(main() 메서드가 포함된 클래스)를 지정해야 하며, 가상 머신은 이 클래스를 먼저 초기화합니다.

5) jdk7+의 동적 언어 지원을 사용할 때, java.lang.invoke.MethodHandle 인스턴스의 최종 파싱 결과가 REF_getStatic, REF_putStatic, REF_invokeStatic의 메소드 핸들이고, 이 메소드 핸들에 해당하는 클래스가 존재하지 않는 경우 초기화되었으면 먼저 트리거를 초기화해야 합니다.

수동 참조: 클래스가 수동 참조인 경우 클래스는 초기화 프로세스를 트리거하지 않습니다.

1) 하위 클래스를 통해 상위 클래스의 정적 필드를 참조해도 하위 클래스가 초기화되지 않습니다. 정적 필드의 경우 해당 필드를 직접 정의한 클래스만 초기화되므로, 상위 클래스에 정의된 정적 필드를 하위 클래스를 통해 참조하면 상위 클래스의 초기화만 트리거되고, 해당 클래스의 초기화는 트리거되지 않습니다. 아강.

2) 배열 정의를 통해 클래스를 참조해도 이 클래스의 초기화가 트리거되지 않습니다.

3) 상수는 컴파일 단계에서 호출 클래스의 상수 풀에 저장됩니다. 본질적으로 상수를 정의하는 클래스를 직접 참조하지 않으므로 상수를 정의하는 클래스의 초기화가 트리거되지 않습니다. .

위 내용은 Java 클래스 로딩 메커니즘이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.