JVM 에서 클래스 를 불 러 오 는 과정

4000 단어 JVM로드
클래스 로 딩 과정
자바 소스 코드 는 class 바이트 로 컴 파일 되 었 습 니 다.JVM 은 클래스 데 이 터 를 설명 하 는 바이트 코드.class 파일 을 메모리 에 불 러 오고 데 이 터 를 검사,변환 분석,초기 화 하여 가상 컴퓨터 가 직접 사용 할 수 있 는 자바 형식 을 만 들 었 습 니 다.이것 이 바로 가상 컴퓨터 의 클래스 로드 메커니즘 입 니 다.
클래스 는 가상 컴퓨터 메모리 에 불 러 오기 시작 하여 메모리 에서 마 운 트 해제 할 때 까지 수명 주 기 는 로드(Loading),검증(Verification),준비(Preparation),해석(Resolution),초기 화(Initialization),사용(Using),마 운 트 해제(Unloading)7 단 계 를 포함 하 는데 그 중에서 검증,준비,해석 세 부분 을 통칭 링크 라 고 합 니 다.

로 딩(로 딩),검증,준비,초기 화,마 운 트 해제 등 다섯 단계 의 순 서 는 고정 되 어 있 으 며,이러한 로 딩 과정 은 반드시 이러한 순서 로 시작 해 야 하 며,분석 단 계 는 일정 하지 않 습 니 다.이것 은 어떤 경우 에 초기 화 된 후에 시작 할 수 있 습 니 다.이것 은 실행 할 때 동적 바 인 딩 특성(동적 바 인 딩 또는 말기 바 인 딩,예 를 들 어 재 작성)이 라 고도 합 니 다.
1.불 러 오기:
로드 단계 에서 가상 컴퓨터 는 주로 세 가지 일 을 완성 합 니 다.
1.하나의 클래스 의 전체 한정 명 을 통 해 이러한 바 이 너 리 바이트 흐름 을 정의 합 니 다.
2.이 바이트 흐름 이 대표 하 는 정적 저장 구 조 를 방법 구역 의 운행 시 데이터 구조 로 전환시킨다.
3.자바 더미 에 이 종 류 를 대표 하 는 자바.lang.Class 대상 을 생 성하 여 방법 영역 데이터 의 접근 입구 로 합 니 다.
클래스 로 딩 과정의 다른 단계 에 비해 로 딩 단계(로 딩 단계 에서 클래스 를 가 져 오 는 바 이 너 리 바이트 흐름 동작)는 개발 기 제어 성 이 가장 강 한 단계 입 니 다.로 딩 단 계 는 시스템 이 제공 하 는 클래스 로 더(ClassLoader)를 사용 하여 완성 할 수 있 고 사용자 정의 클래스 로 더 로 완성 할 수 있 기 때 문 입 니 다.개발 자 는 자신의 클래스 로 더 를 정의 하여 바이트 흐름 을 제어 할 수 있 습 니 다.
로드 단계 가 완 료 된 후에 가상 컴퓨터 외부의 바 이 너 리 바이트 흐름 은 가상 컴퓨터 가 필요 로 하 는 형식 에 따라 방법 구역 에 저장 되 고 방법 구역 의 데이터 저장 형식 은 가상 컴퓨터 가 자체 적 으로 정 의 를 실현 하 며 가상 기 는 이 지역 의 구체 적 인 데이터 구 조 를 규정 하지 않 았 다.그리고 자바 더미 에서 자바.lang.Class 류 의 대상 을 예화 합 니 다.이 대상 은 프로그램 접근 방법 구역 의 이러한 유형의 데이터 의 외부 인터페이스 입 니 다.
2.검증:
검증 단계 역할 은 Class 파일 의 바이트 흐름 에 포 함 된 정보 가 JVM 규범 에 부합 되 고 JVM 에 해 를 끼 치지 않도록 하 는 것 입 니 다.검증 에 실패 하면 자바.lang.Verify Error 이상 또는 하위 클래스 이상 을 던 집 니 다.검증 과정 은 네 단계 로 나 뉜 다.
1.파일 형식 검증:바이트 스 트림 파일 이 Class 파일 형식의 규범 에 부합 되 는 지 검증 하고 현재 가상 컴퓨터 에서 정확하게 처리 할 수 있 습 니 다.
2.메타 데이터 검증:바이트 코드 에 묘 사 된 정 보 를 의미 분석 하여 묘 사 된 정보 가 자바 언어의 규범 에 부합 하도록 하 는 것 이다.
3.바이트 코드 검증:주로 데이터 흐름 과 제어 흐름 을 분석 하여 피 검증 류 의 방법 이 실 행 될 때 가상 컴퓨터 에 해 를 끼 치지 않도록 한다.
4.기호 인용 검증:기호 인용 검증 은 가상 컴퓨터 가 기호 인용 을 직접 인용 으로 바 꿀 때 발생 하 는데 이 전환 동작 은 분석 단계 에서 발생 한다.
3.준비:
준비 단 계 는 변수 에 메모 리 를 할당 하고 클래스 변 수 를 초기 화 합 니 다.이 단계 에서 분 배 된 클래스 변수(static 수식 변수)는 클래스 의 인 스 턴 스 변 수 를 포함 하지 않 습 니 다.final 이 아 닌 변수 에 대해 JVM 은 할당 문장의 값 이 아 닌'0 값'으로 설정 합 니 다.
pirvate static int size = 12;
그러면 이 단계 에서 size 의 값 은 12 가 아니 라 0 이다.final 수식 클래스 변 수 는 실제 값 으로 대 입 됩 니 다.
4.해석:
분석 단 계 는 가상 컴퓨터 상수 탱크 안의 기호 참조 가 직접 참조 로 바 뀌 는 과정 이다.
기호 인용:기호 인용 은 한 조 의 기호 로 인용 한 목표 대상 을 묘사 하 는 것 이다.기 호 는 모든 형식의 글자 양 일 수 있 고 사용 할 때 다른 의미 없 이 목 표를 찾 으 면 된다.기호 인용 은 가상 컴퓨터 가 실현 하 는 메모리 레이아웃 과 상 관 없 이 인용 대상 이 반드시 메모리 에 불 러 온 것 은 아 닙 니 다.
직접 인용:직접 인용 은 목표 대상 을 직접 가리 키 는 지침,상대 적 인 오프셋 또는 목 표를 간접 적 으로 찾 을 수 있 는 문형 일 수 있 습 니 다.직접 인용 은 가상 컴퓨터 메모리 레이아웃 과 관련 이 있 습 니 다.같은 기호 가 서로 다른 가상 컴퓨터 인 스 턴 스 에서 번역 한 직접 인용 은 일반적으로 같 지 않 습 니 다.직접 인용 이 있 으 면 인용 목 표 는 반드시 메모리 에 존재 합 니 다.
가상 컴퓨터 규범 은 분석 단계 에서 발생 하 는 구체 적 인 시간 을 규정 하지 않 고 anewarry,checkcast,getfield,instanceof,invokeinterface,invokespical,invokestatic,invoke virtual,multianewarray,new,putfield 와 putstatic 등 13 개 조작 기호 가 인용 하 는 바이트 명령 을 실행 하기 전에 먼저 사용 하 는 기호 인용 을 분석 하도록 요구 했다.따라서 가상 컴퓨터 는 필요 에 따라 클래스 가 불 러 올 때 상수 탱크 의 기호 인용 을 해석 하 는 지,아니면 하나의 기호 인용 이 사용 되 기 전에 해석 하 는 지 판단 합 니 다.
해석 하 는 동작 은 주로 클래스 나 인터페이스,필드,클래스 방법,인터페이스 방법 네 가지 기호 참조 에 대해 진행 된다.컴 파일 후 상수 탱크 내 CONSTANTClass_Info、CONSTANT_Fieldref_Info、CONSTANT_Methodef_Info、CONSTANT_InterfaceMethoder_Info 네 가지 상수 유형.
1.클래스,인터페이스의 해석
2.필드 분석
3.유형 분석
4.인터페이스 방법 분석
5.초기 화:
클래스 의 초기 화 단 계 는 클래스 로드 과정의 마지막 단계 입 니 다.준비 단계 에서 클래스 변 수 는 시스템 이 요구 하 는 초기 값 을 부 여 했 고 초기 화 단계 에 서 는 프로그래머 가 프로그램 을 통 해 제정 한 주관적 인 계획 에 따라 클래스 변수 와 다른 자원 을 초기 화하 거나 다른 측면 에서 표현 할 수 있 습 니 다.초기 화 단 계 는 클래스 구조 기 를 실행 하 는 것 입 니 다.
6.사용:
새 스 레 드-프로그램 카운터-jvm 스 택 실행(대상 참조)-메모리 쌓 기(직접 참조)-방법 구역
7.마 운 트 해제:
GC 쓰레기 회수
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기