JVM 시스템 구조 상세 설명
4075 단어 jvm
Class File
Class File 은 플랫폼 과 무관 한 바 이 너 리 파일 로 JVM 에서 실 행 될 수 있 는 바이트 코드 를 포함 하고 있 으 며,다 중 바이트 에 서 는 큰 순 서 를 사용 하고 문 자 는 개 선 된 UTF-8 인 코딩 을 사용 합 니 다.Class 파일 은 다음 과 같은 클래스 나 인터페이스의 정 보 를 정확하게 설명 합 니 다.
4.567917.상수 탱크:수치 와 문자열 의 상량,메타 데이터,예 를 들 어 유형 명,방법 명,파라미터,그리고 각종 기호 참조
클래스 로 더,JVM 이 클래스 에서 처음 사용 할 때 동적 으로 로드,링크,초기 화 됩 니 다.JVM 의 기본 로드 모델 은 부모 위임 모델 로 클래스 로드 간 에 부자 관계 의 차원 구조 가 존재 하고 내부 사용 조합 이 이 루어 집 니 다.그 밖 에 다른 로 딩 방식 도 있 습 니 다.예 를 들 어 Servlet 로 딩 은 먼저 자신 이 로 딩 을 시도 하고 상부 로 딩 기,클래스 격 리 를 성공 적 으로 위임 하지 못 했 습 니 다.OSGI 로 더 는 상·하층 구분 없 이 유연 한 그물 모양 의존 관계 다.
로드
불 러 오 는 것 은 Class 파일 이 표시 하 는 클래스 나 인 터 페 이 스 를 JVM 방법 영역 에 대응 하 는 java.lang.Class 대상 을 만 드 는 것 입 니 다.예 를 들 어 Class.forName(),ClassLoader.loadclass(),반사 모두 클래스 불 러 오 는 것 을 촉발 할 수 있 습 니 다.클래스 로 딩 을 실행 할 때 자세 한 과정 은 다음 과 같 습 니 다.
클래스 가 불 러 왔 는 지 확인 합 니 다4.567917.로 딩 요청 을 상층 류 로 더 에 위임 합 니 다.4.567918.
4.567917.검증:class 파일 의 정확성 을 확보 합 니 다4.567917.준비:클래스 정적 필드 에 메모 리 를 할당 하고 기본 값 으로 초기 화 하 며 바이트 코드 명령 을 실행 하지 않 습 니 다4.567917.해석:기호 인용 을 방법 구역(운행 시 상수 탱크)으로 직접 참조 합 니 다초기 화
클래스 초기 화 방법,즉 정적 필드 를 할당 하고 정적 블록 을 실행 하 며 순서대로 정 의 된 선후 입 니 다.부모 클래스 의 정적 도 메 인 은 하위 클래스 의 정적 도 메 인 보다 먼저 초기 화 됩 니 다.
이로써 하나의 클래스 나 인터페이스 가 메모리 에 불 러 오 면 JVM 은 전체 과정 이 스 레 드 안전 을 보장 합 니 다.주의해 야 할 것 은 전체 과정 이 어떠한 실례 대상 도 언급 되 지 않 았 다 는 것 이다.
런 타임 데이터 영역
1.Method Area:스 레 드 공유,런 타임 풀,클래스 필드 와 방법 정보,정적 변수 와 방법 을 저장 하 는 바이트 코드 는 쌓 인 논리 구성 부분 으로 이 부분의 쓰레기 수 거 는 선택 할 수 있 습 니 다.특히 Hotspot JVM 은 JDK 8 이후 이 부분 메모리 의 내용 을 조 정 했 으 며,class meta-data 의 분 배 는 로 컬 메모리,interned String 과 클래스 정적 변 수 는 자바 더미 로 이동 했다.
2.런 타임 풀:JVM 에 있어 핵심 적 인 역할 을 합 니 다.기본적으로 방법 이나 필드 와 관련 되 고 JVM 은 런 타임 풀 에서 구체 적 인 메모리 주 소 를 검색 합 니 다.
3.Heap:스 레 드 공유,인 스 턴 스 대상,인 스 턴 스 변수 와 배열 을 저장 하고 쓰레기 회수 의 주요 구역 입 니 다.
4.JVM Stack:스 레 드 는 스 택 프레임 을 저장 하 는 데 사 용 됩 니 다.방법 이 호출 될 때 스 택 프레임 을 만 들 고 스 택 프레임 은 다음 과 같은 몇 부분 으로 구 성 됩 니 다.
부분 변수 표:0 부터 this,방법 파라미터,부분 변 수 를 저장 합 니 다4.567917.조작 수 스 택:방법의 작업 구역 은 조작 수 스 택 과 부분 변수 간 에 데 이 터 를 교환 하고 중간 결 과 를 저장 하 며 조작 수 스 택 의 깊이 는 컴 파일 할 때 확정 할 수 있 습 니 다4.567917.프레임 데이터:방법 반환 값,이상 분파,그리고 현재 방법 이 있 는 클래스 가 실 행 될 때 상 당량 탱크 의 참조5.PC Register:스 레 드 개인,현재 명령 주 소 를 저장 하고 실행 후 다음 명령 주 소 를 가리 킵 니 다.
6.Native Method Stack:스 레 드 개인,로 컬 방법 정보 저장,C 또는 C+스 택.
실행 엔진
바이트 코드 읽 기,번역,실행.JVM 은 스 택 구 조 를 바탕 으로 이 스 택 은 바로 조작 스 택 이 고 바이트 코드 명령 은 이 를 통 해 각종 연산 을 하 는 것 입 니 다.레지스터 기반 가상 컴퓨터 도 있다.
4.567917.Interpreter,번역:바이트 코드 를 해석 하 는 것 이 비교적 빠 르 고 실행 이 느 리 며 매번 방법 이 호출 될 때마다 다시 번역 하고 해석 하 는 것 이 단점 이다4.567917.JIT Compiler,즉시 컴 파일:프로그램 에서 자주 호출 되 는 핫 이 슈 방법 을 찾 아 바이트 코드 를 로 컬 코드 로 컴 파일 하여 성능 을 향상 시킨다
JNI,로 컬 방법,c/c+라 이브 러 리 호출;엔진 실행 에 필요 한 로 컬 방법 라 이브 러 리 입 니 다.
작은 매듭
주류 JVM 의 실현 은 Oracle 의 Hotspot JVM,Jrockit,IBM 의 JVM 이 있다.JVM 튜 닝 하면 기본적으로 Hotspot VM 을 말 하 는데 그 유행 정 도 를 알 수 있다.이제 자바 가 JVM 에 대해 잘 모 르 면 좀 낮 아 보 여요.-v-.
고 품질 코드 를 쓰 려 면 JVM 뿐만 아니 라 변조,문제 조사 등 모두 완 비 된 컴퓨터 기초 지식 이 필요 하 다.사실은 어떤 언어 로 개발 하 든 자신의 컴퓨터 지식 체 계 를 구축 하고 보완 하 는 과정 이다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.