JVM 시스템 구조 상세 설명

4075 단어 jvm
JVM 은 추상 적 인 컴퓨터 로 스 택 구 조 를 바탕 으로 자신의 명령 집합 과 메모리 관 리 를 가지 고 자바 크로스 플랫폼 의 근거 이다.JVM 은 바이트 코드 를 실행 하거나 바이트 코드 를 로 컬 코드 로 컴 파일 하여 집행 한다 고 설명 한다.자바 가상 컴퓨터 시스템 구 조 는 다음 과 같다.

Class File
Class File 은 플랫폼 과 무관 한 바 이 너 리 파일 로 JVM 에서 실 행 될 수 있 는 바이트 코드 를 포함 하고 있 으 며,다 중 바이트 에 서 는 큰 순 서 를 사용 하고 문 자 는 개 선 된 UTF-8 인 코딩 을 사용 합 니 다.Class 파일 은 다음 과 같은 클래스 나 인터페이스의 정 보 를 정확하게 설명 합 니 다.
4.567917.상수 탱크:수치 와 문자열 의 상량,메타 데이터,예 를 들 어 유형 명,방법 명,파라미터,그리고 각종 기호 참조
  • 방법의 바이트 코드 명령,매개 변수 개수,부분 변수,최대 조작 수 스 택 깊이,이상 등 정보
  • Class Loader
    클래스 로 더,JVM 이 클래스 에서 처음 사용 할 때 동적 으로 로드,링크,초기 화 됩 니 다.JVM 의 기본 로드 모델 은 부모 위임 모델 로 클래스 로드 간 에 부자 관계 의 차원 구조 가 존재 하고 내부 사용 조합 이 이 루어 집 니 다.그 밖 에 다른 로 딩 방식 도 있 습 니 다.예 를 들 어 Servlet 로 딩 은 먼저 자신 이 로 딩 을 시도 하고 상부 로 딩 기,클래스 격 리 를 성공 적 으로 위임 하지 못 했 습 니 다.OSGI 로 더 는 상·하층 구분 없 이 유연 한 그물 모양 의존 관계 다.
    로드
    불 러 오 는 것 은 Class 파일 이 표시 하 는 클래스 나 인 터 페 이 스 를 JVM 방법 영역 에 대응 하 는 java.lang.Class 대상 을 만 드 는 것 입 니 다.예 를 들 어 Class.forName(),ClassLoader.loadclass(),반사 모두 클래스 불 러 오 는 것 을 촉발 할 수 있 습 니 다.클래스 로 딩 을 실행 할 때 자세 한 과정 은 다음 과 같 습 니 다.
    클래스 가 불 러 왔 는 지 확인 합 니 다4.567917.로 딩 요청 을 상층 류 로 더 에 위임 합 니 다.4.567918.
  • 자신 이 검색 클래스 를 시도 하고 불 러 오기
  • ClassLoader 가 classpath 에서 클래스 파일 을 찾 지 못 하면 ClassNotFoundException 을 던 집 니 다.클래스 A 참조 클래스 B,클래스 A 가 성공 적 으로 불 러 왔 지만 B 를 불 러 올 때 클래스 파일 을 찾 지 못 하면 NoClassDef Foundation Error 를 던 집 니 다.JVM 에는 다음 과 같은 몇 가지 종류의 로 더 가 있 습 니 다.
  • Bootstrap ClassLoader,시작 클래스 로 더,로드\jre\lib 에서 자바 핵심 라 이브 러 리
  • 확장 클래스 로드,확장 클래스 로드,로드\jre\lib\ext 의 클래스
  • System ClassLoader,시스템 클래스 로 더,응용 프로그램 클래스 로 더(Application class loader)라 고도 부 르 며,CLASSPATH 환경 변수 중의 클래스 를 불 러 옵 니 다
  • 링크
    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,즉시 컴 파일:프로그램 에서 자주 호출 되 는 핫 이 슈 방법 을 찾 아 바이트 코드 를 로 컬 코드 로 컴 파일 하여 성능 을 향상 시킨다
  • Garbage Collector,쓰레기 수집 기:회수 무효 대상,대상 의 회수 여 부 를 판단 하고 서로 다른 쓰레기 회수 알고리즘 을 사용 할 수 있 습 니 다
  • 로 컬 방법 인터페이스 와 라 이브 러 리
    JNI,로 컬 방법,c/c+라 이브 러 리 호출;엔진 실행 에 필요 한 로 컬 방법 라 이브 러 리 입 니 다.
    작은 매듭
    주류 JVM 의 실현 은 Oracle 의 Hotspot JVM,Jrockit,IBM 의 JVM 이 있다.JVM 튜 닝 하면 기본적으로 Hotspot VM 을 말 하 는데 그 유행 정 도 를 알 수 있다.이제 자바 가 JVM 에 대해 잘 모 르 면 좀 낮 아 보 여요.-v-.
    고 품질 코드 를 쓰 려 면 JVM 뿐만 아니 라 변조,문제 조사 등 모두 완 비 된 컴퓨터 기초 지식 이 필요 하 다.사실은 어떤 언어 로 개발 하 든 자신의 컴퓨터 지식 체 계 를 구축 하고 보완 하 는 과정 이다.
    이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기