가상 머신 클래스 마운트 메커니즘과 new 대상의 과정

2001 단어 JVM

VM 클래스 로드 메커니즘:


클래스는 가상 컴퓨터 메모리에 불러오기 시작해서 메모리를 마운트 해제할 때까지 전체 생명주기는 불러오기, 검증, 준비, 해석, 초기화, 사용과 마운트 7단계를 포함한다.이 중 검증, 준비, 해석 세 단계가 연결된다.불러오기, 검증, 준비, 초기화, 마운트 등 몇 단계의 순서는 고정적이며, 해석 단계는 반드시 정해지지 않으며, 일부 상황에서 초기화 단계 이후에 시작할 수 있다. 이것은 자바 언어의 운행을 지원하기 위한 귀속 (동적 귀속 또는 말기 귀속) 이다.

new 객체 절차:

A a=new A();
  • 먼저 JVM의 방법구에서 클래스의class 대상을 찾고 찾을 수 있으면 정의에 따라 대상을 생성하고 2를 찾을 수 없다.
  • 캐리어 정의: 클래스 캐리어가 클래스를 찾습니다.class 파일은 찾은 후에 파일을 분석하여 class 대상 저장 방법 구역으로 변환하여 나중에 호출하기 편리하다. JDK의class는 일반적으로 JVM이 시작할 때 부팅 클래스 로더를 사용하여 로딩을 완성하고 사용자의class는 사용할 때 다시 로딩한다.자바의 ClassLoader의 마운트는 부모위 파견 모델을 사용하고 부모위 파견 모델을 사용하여 클래스를 마운트할 때 다음과 같은 몇 가지 절차를 사용합니다. (1) 현재 ClassLoader는 자신이 마운트한 클래스에서 마운트되었는지 확인하고 마운트되었으면 원래 마운트한 클래스로 돌아갑니다.모든 클래스 마운트는 자신의 마운트 캐시를 가지고 있으며, 하나의 클래스가 마운트된 후에 캐시를 넣고 다음 마운트할 때 바로 되돌아갈 수 있다.(2) 현재 ClassLoader의 캐시에서 불러오는 클래스를 찾을 수 없을 때 부모 클래스에 불러오기를 의뢰합니다. 부모 클래스는 같은 정책을 사용하고 먼저 자신의 캐시를 확인한 다음에 없으면 부모 클래스에 불러오기를 의뢰합니다. Boostrap ClassLoader까지 갑니다.(3) 모든 부모 클래스 마운트가 불러오지 않을 때 현재 클래스 마운트가 불러오고 다음 마운트 요청이 있을 때 바로 되돌아갈 수 있도록 자신의 캐시에 넣는다.
  • JVM의 무더기에서 대상에게 메모리 공간을 개척한다.
  • 대상 초기화, 순서는 다음과 같다:
  • 먼저 부류의 정적 속성을 초기화한 다음에 부류의 정적 코드 블록을 초기화한다.
  • 하위 클래스의 정적 속성을 초기화하고 하위 클래스의 정적 코드 블록을 초기화한다.
  • 부류의 특유한 속성을 초기화한다.
  • 부류의 구조 코드 블록을 초기화한다.
  • 부류 대상에 상응하는 구조 방법을 초기화한다.
  • 초기화 자류의 특유한 속성;
  • 서브클래스의 구조 코드 블록을 초기화한다.
  • 하위 클래스의 메모리 주소를 창고의 인용 대상에게 부여합니다.

  • PS. 왜 이런 위탁 메커니즘을 채택해야 합니까?
    이 문제를 이해하려면 먼저 ClassLoader의 개념인'명명 공간'을 도입해야 한다. 이것은 하나의 클래스를 확정하려면 클래스의 제한된 이름과 이런 클래스를 불러오는 ClassLoader가 공동으로 확정해야 한다는 것을 말한다.즉, 두 클래스의 전체 이름이 같아도 서로 다른 클래스가 불러오기 때문에 JVM에서 클래스가 다르다는 것이다.명명 공간을 이해한 후에 우리는 의뢰 모델을 살펴보자. 의뢰 모델을 사용한 후에 서로 다른 ClassLoader의 상호작용 능력을 강화했다. 예를 들어 위에서 말한 JDK 본생이 제공한 라이브러리, 예를 들어hashmap,linkedList 등이다. 이런 종류는boostrap 클래스 캐리어에 불러온 후에 프로그램에 몇 개의 클래스 캐리어가 있든 이런 종류는 사실 공유할 수 있다.이렇게 하면 서로 다른 종류의 마운트가 같은 이름의 다른 종류를 불러와서 혼란을 초래하는 것을 피할 수 있다.

    좋은 웹페이지 즐겨찾기