JVM(Java Virtual Machine)은 추상 머신입니다. Java 바이트코드가 실행될 수 있는 런타임 환경을 제공하는 사양입니다.
JVM은 다양한 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있습니다(즉, JVM은 플랫폼에 따라 다릅니다).
JVM이란?
그것은:
자바 문
- 사양 Java Virtual Machine의 작업이 지정되는 곳입니다. 그러나 구현 공급자는 독립적으로 알고리즘을 선택합니다. 해당 구현은 Oracle 및 기타 회사에서 제공되었습니다.
- 구현 그 구현은 JRE(Java Runtime Environment)로 알려져 있습니다.
- 런타임 인스턴스 Java 클래스를 실행하기 위해 명령 프롬프트에 java 명령을 작성할 때마다 JVM 인스턴스가 생성됩니다.
기능
JVM은 다음 작업을 수행합니다.
- 코드 로드
- 코드 확인
- 코드 실행
- 런타임 환경 제공
JVM은 다음에 대한 정의를 제공합니다.
- 메모리 영역
- 클래스 파일 형식
- 레지스터 세트
- 가비지 수집 힙
- 치명적인 오류 보고 등
JVM 아키텍처
JVM의 내부 아키텍처를 이해해 봅시다. 클래스로더, 메모리 영역, 실행 엔진 등이 포함되어 있습니다.
1) 클래스로더
클래스로더는 클래스 파일을 로드하는 데 사용되는 JVM의 하위 시스템입니다. Java 프로그램을 실행할 때마다 클래스로더에 의해 먼저 로드됩니다. Java에는 세 가지 내장 클래스로더가 있습니다.
//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) 실행 엔진
여기에는 다음이 포함됩니다.
8) 자바 네이티브 인터페이스
JNI(Java Native Interface)는 C, C++, 어셈블리 등과 같은 다른 언어로 작성된 다른 애플리케이션과 통신하기 위한 인터페이스를 제공하는 프레임워크입니다. Java는 JNI 프레임워크를 사용하여 콘솔에 출력을 보내거나 OS 라이브러리와 상호 작용합니다.