logo

JVM(자바 가상 머신) 아키텍처

  1. 자바 가상 머신
  2. JVM의 내부 아키텍처

JVM(Java Virtual Machine)은 추상 머신입니다. Java 바이트코드가 실행될 수 있는 런타임 환경을 제공하는 사양입니다.

JVM은 다양한 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있습니다(즉, JVM은 플랫폼에 따라 다릅니다).

JVM이란?

그것은:

자바 문
  1. 사양 Java Virtual Machine의 작업이 지정되는 곳입니다. 그러나 구현 공급자는 독립적으로 알고리즘을 선택합니다. 해당 구현은 Oracle 및 기타 회사에서 제공되었습니다.
  2. 구현 그 구현은 JRE(Java Runtime Environment)로 알려져 있습니다.
  3. 런타임 인스턴스 Java 클래스를 실행하기 위해 명령 프롬프트에 java 명령을 작성할 때마다 JVM 인스턴스가 생성됩니다.

기능

JVM은 다음 작업을 수행합니다.

  • 코드 로드
  • 코드 확인
  • 코드 실행
  • 런타임 환경 제공

JVM은 다음에 대한 정의를 제공합니다.

  • 메모리 영역
  • 클래스 파일 형식
  • 레지스터 세트
  • 가비지 수집 힙
  • 치명적인 오류 보고 등

JVM 아키텍처

JVM의 내부 아키텍처를 이해해 봅시다. 클래스로더, 메모리 영역, 실행 엔진 등이 포함되어 있습니다.

JVM 아키텍처

1) 클래스로더

클래스로더는 클래스 파일을 로드하는 데 사용되는 JVM의 하위 시스템입니다. Java 프로그램을 실행할 때마다 클래스로더에 의해 먼저 로드됩니다. Java에는 세 가지 내장 클래스로더가 있습니다.

    부트스트랩 클래스로더: Extension 클래스로더의 상위 클래스인 첫 번째 클래스로더입니다. 그것은 rt.jar java.lang 패키지 클래스, java.net 패키지 클래스, java.util 패키지 클래스, java.io 패키지 클래스, java.sql 패키지 클래스 등과 같은 Java Standard Edition의 모든 클래스 파일을 포함하는 파일입니다.확장 클래스 로더: Bootstrap의 하위 클래스로더이자 System 클래스로더의 상위 클래스로더입니다. 내부에 있는 jar 파일을 로드합니다. $JAVA_HOME/jre/lib/ext 예배 규칙서.시스템/애플리케이션 클래스로더: Extension 클래스로더의 하위 클래스로더입니다. 클래스 경로에서 클래스 파일을 로드합니다. 기본적으로 클래스 경로는 현재 디렉터리로 설정됩니다. '-cp' 또는 '-classpath' 스위치를 사용하여 클래스 경로를 변경할 수 있습니다. 애플리케이션 클래스로더라고도 합니다.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
지금 테스트해보세요

산출:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

이는 Java에서 제공하는 내부 클래스로더입니다. 자신만의 클래스로더를 생성하려면 ClassLoader 클래스를 확장해야 합니다.

2) 수업(방법) 영역

클래스(메소드) 영역은 런타임 상수 풀, 필드 및 메소드 데이터, 메소드 코드 등 클래스별 구조를 저장합니다.

10의 6승

3) 힙

객체가 할당되는 런타임 데이터 영역입니다.

4) 스택

Java 스택은 프레임을 저장합니다. 지역 변수와 부분 결과를 보유하고 메서드 호출 및 반환에 역할을 합니다.

각 스레드에는 스레드와 동시에 생성된 전용 JVM 스택이 있습니다.

메소드가 호출될 때마다 새 프레임이 생성됩니다. 메서드 호출이 완료되면 프레임이 삭제됩니다.

5) 프로그램 카운터 레지스터

PC(프로그램 카운터) 레지스터에는 현재 실행 중인 Java Virtual Machine 명령어의 주소가 포함되어 있습니다.

6) 네이티브 메소드 스택

여기에는 애플리케이션에 사용되는 모든 기본 메서드가 포함되어 있습니다.

7) 실행 엔진

여기에는 다음이 포함됩니다.

    가상 프로세서 통역사:바이트코드 스트림을 읽은 다음 명령어를 실행합니다.JIT(Just-In-Time) 컴파일러:성능을 향상시키기 위해 사용됩니다. JIT는 비슷한 기능을 가진 바이트 코드 부분을 동시에 컴파일하므로 컴파일에 필요한 시간이 줄어듭니다. 여기서 '컴파일러'라는 용어는 JVM(Java Virtual Machine)의 명령어 세트를 특정 CPU의 명령어 세트로 번역하는 역할을 한다.

8) 자바 네이티브 인터페이스

JNI(Java Native Interface)는 C, C++, 어셈블리 등과 같은 다른 언어로 작성된 다른 애플리케이션과 통신하기 위한 인터페이스를 제공하는 프레임워크입니다. Java는 JNI 프레임워크를 사용하여 콘솔에 출력을 보내거나 OS 라이브러리와 상호 작용합니다.