SW/Java

Java : JVM (Java Virtual Machine) 아키텍처 개념, 개요, 설명

얇은생각 2023. 2. 15. 07:30
반응형

Java : JVM (Java Virtual Machine) 아키텍처 개념, 개요, 설명

 

 

 

JVM(Java Virtual Machine) 아키텍처

JVM(Java Virtual Machine)은 추상 시스템입니다. 자바 바이트코드를 실행할 수 있는 런타임 환경을 제공하는 사양입니다.

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

 

 

 

JVM이란

Java 가상 시스템의 작업이 지정된 규격입니다. 그러나 구현 제공자는 알고리즘을 선택하는 데 독립적입니다. Oracle 및 기타 기업에서 구현했습니다.

구현은 JRE(Java Runtime Environment)로 알려져 있습니다.

런타임 인스턴스 Java 클래스를 실행하기 위해 명령 프롬프트에 java 명령을 쓸 때마다 JVM의 인스턴스가 생성됩니다.

 

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

- 코드를 로드합니다.

- 코드를 확인합니다.

- 코드를 실행합니다.

- 런타임 환경을 제공합니다.

 

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

- 메모리 영역입니다.

- 클래스 파일 형식입니다.

- 레지스터 집합입니다.

- 가비지가 수집된 힙입니다.

- 치명적인 오류 보고 등이 있습니다.

 

 

 

JVM 아키텍처

이제 JVM의 내부 아키텍처를 이해하겠습니다. 클래스 로더, 메모리 영역, 실행 엔진 등을 포함합니다.

Java : JVM (Java Virtual Machine) 아키텍처 개념, 개요, 설명

 

 

1) 클래스 로더

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

Bootstrap ClassLoader: 이것은 익스텐션 클래스 로더의 슈퍼 클래스인 첫 번째 클래스 로더입니다. java.jar 패키지 클래스, java.net 패키지 클래스, java.jar 패키지 클래스, java.net 패키지 클래스, java.sql 패키지 클래스 등과 같은 Java Standard Edition의 모든 클래스 파일이 포함된 rt.jar 파일을 로드합니다.

확장 클래스 로더: Bootstrap의 하위 클래스 로더와 System 클래스 로더의 상위 클래스 로더입니다. $JAVA_ 안에 있는 jar 파일을 로드합니다.HOME/jre/lib/ext 디렉토리입니다.

시스템/애플리케이션 클래스 로더: 확장 클래스 로더의 하위 클래스 로더입니다. 클래스 경로에서 클래스 파일을 로드합니다. 기본적으로 클래스 경로는 현재 디렉토리로 설정됩니다. -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에서 제공하는 내부 클래스 로더입니다. 자체 클래스 로더를 만들려면 클래스 로더 클래스를 확장해야 합니다.

 

 

2) 클래스(메서드) 영역

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

 

 

3) 더미

개체가 할당된 런타임 데이터 영역입니다.

 

 

4) 스택

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

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

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

 

 

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

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

 

 

6) 기본 메서드 스택

응용프로그램에 사용된 모든 기본 방법을 포함합니다.

 

 

7) 실행 엔진

다음을 포함합니다.

가상 프로세서입니다.

인터프리터: 바이트코드 스트림을 읽은 다음 명령을 실행합니다.

Just-In-Time(JIT) 컴파일러: 성능 향상을 위해 사용됩니다. JIT는 유사한 기능을 가진 바이트 코드의 일부를 동시에 컴파일하므로 컴파일에 필요한 시간이 줄어듭니다. 여기서 "컴파일러"라는 용어는 Java 가상 시스템(JVM)의 명령 집합에서 특정 CPU의 명령 집합으로의 변환기를 의미합니다.

 

 

8) Java 네이티브 인터페이스

Java Native Interface(JNI)는 C, C++, Assembly 등과 같은 다른 언어로 작성된 다른 응용 프로그램과 통신할 수 있는 인터페이스를 제공하는 프레임워크입니다. Java는 JNI 프레임워크를 사용하여 출력을 콘솔로 전송하거나 OS 라이브러리와 상호 작용합니다.

반응형