JVM VM과 같은 로드 프로세스

JVM 가상 시스템의 실행 파일은 입니다.class 파일, JVM 가상 기회는 언제 자신이 필요로 하는 클래스를 불러올 수 있습니까?그동안 이런 문제가 있었습니다. 인터넷에 접속해서 많은 네티즌들의 설명을 찾았는데 이해를 하는 것 같았지만 잘 설명할 수가 없었습니다. 오늘'JVM 가상 머신을 깊이 이해하다'라는 책의 설명을 보고 자신이 약간 이해를 했다고 느꼈습니다. 여기에 자신의 이해를 기록해 둡니다~!

클래스의 라이프 사이클


클래스 로드 프로세스(액티브 | 패시브)


클래스의 주동적인 인용(final 상수 제외)과 정적 방법-java를 사용합니다.lang.reflect 패키지 방법은 클래스에 반사 호출을 합니다 - 클래스를 초기화하고, 클래스가 초기화되지 않으면 클래스를 초기화합니다. - 어떤 프로그램을 실행하려면main 방법이 있는 클래스를 먼저 시작해야 합니다.
클래스의 수동 참조(클래스 초기화는 발생하지 않음) - 정적 변수에 액세스할 때 실제 생명이라는 정적 변수의 클래스만 초기화됩니다(하위 클래스를 통해 상위 클래스의 정적 변수를 참조하면 하위 클래스가 초기화되지 않습니다) - 배열 정의 클래스 응용 프로그램을 통해 이러한 초기화 A[] a = new A[10]를 트리거하지 않습니다. -상수 인용 (final 형식) 은 이런 초기화를 촉발하지 않습니다. (상수는 컴파일 단계에서 호출 클래스의 상수 탱크에 저장됩니다.)

클래스 로드 단계의 로드

  • 같은 종류의 권한 정명을 통해 정의된 바이너리 바이트 흐름
  • 이러한 2진 흐름이 대표하는 정적 저장 구조를 방법으로 바꾸는 운행 시 데이터 구조
  • 더미에서 이 종류를 대표하는java를 생성한다.lang.Class 대상, 이 유형의 각종 데이터에 대한 접근 입구
  • 클래스 불러오는 단계의 검증


    JVM 규정 준수 여부는 보안 문제가 없습니다.크게 네 단계로 나뉘는데 그것이 바로 파일 형식 검증, 메타데이터 검증, 바이트 코드 검증, 기호 인용 검증이다.

    클래스 로드 단계 준비


    클래스 변수 (static로 장식된 변수만 포함) 의 내용을 분배하고 클래스 변수의 초기 값을 설정하는 단계에서 이 변수에 사용되는 메모리는 모두 방법에서 분배됩니다.

    클래스 불러오는 단계의 해석


    해석 단계는 가상 시스템이 상수 탱크의 기호 인용을 직접 인용으로 바꾸는 과정이다.(A.a = "Hello"는 A.a가 "Hello"를 가리키는 주소로 바뀝니다.

    클래스 불러오는 단계의 초기화


    초기화 단계에서 클래스 구조기 () 방법을 실행하는 과정, () 방법은 자동 핸드폰 클래스의 모든 클래스 변수의 값을 부여하는 동작과 정적 문장 블록(static {} 블록)의 문장을 합쳐서 생성됩니다-실행 순서는 문장이 원본 파일에 나타나는 순서입니다. (정적 문장 블록은 그 이전에 정의된 변수에만 접근할 수 있습니다. 그 다음에 정의된 변수는 복사할 수 있지만 접근할 수 없습니다) - 현재 클래스의 () 방법을 실행할 때 부모 클래스의 방법이 먼저 실행됩니다.즉, 부류에서 정의된 정적 문장 블록이 부류의 변수 할당 조작보다 낫다는 것을 의미한다. - 가상 기회는 한 종류의 구조기 방법이 다중 스레드 환경에서 정확하게 잠기고 동기화된다는 것을 보장한다. - 인터페이스와 부류의 초기화는 다르다. 인터페이스를 실행하는 방법은 부류를 먼저 실행할 필요가 없다. 부류 인터페이스에서 정의한 변수를 사용할 때만 부류 인터페이스가 초기화된다.

    클래스 불러오는 단계 같은 사용 과정

    // 

    클래스 불러오는 단계 클래스만 마운트 해제 과정


    Java 가상 머신에서 클래스의 라이프 사이클은 객체의 라이프 사이클과 비슷합니다.가상 머신이 대상을 만들고 초기화하여 프로그램이 대상을 사용하게 한 다음에 대상이 더 이상 인용되지 않은 후에 쓰레기 수집을 선택할 수 있습니다.마찬가지로 가상 머신이 클래스를 불러오고 연결하며 초기화하여 프로그램이 클래스를 사용할 수 있도록 하고, 프로그램이 그들을 인용하지 않을 때 선택할 수 있는 마운트를 해제합니다.만약 프로그램이 더 이상 어떤 유형을 인용하지 않는다면, 이 유형은 닿을 수 없기 때문에 쓰레기 수집 (속칭 GC) 될 수 있다.그러나 주의해야 할 것은 JVM이 자체로 가지고 있는 클래스 로더(PS:Bootstrap, ExtClassLoader, AppClassLoader)가 불러오는 유형은 영원히 닿을 수 있기 때문에 영원히 마운트되지 않는다는 것이다.사용자가 정의한 클래스 로더를 사용하여 마운트하는 유형만 터치할 수 없으며 가상 시스템에 의해 회수됩니다.

    좋은 웹페이지 즐겨찾기