JVM이란 무엇입니까? Java 가상 기기 Archi강의
JVM이란 무엇입니까? Java?
Java 가상 머신(JVM) 구동하기 위한 런타임 환경을 제공하는 엔진입니다. Java 코드 또는 애플리케이션. 그것은 변환한다 Java 바이트 코드를 기계 언어로 변환합니다. JVM은 다음의 일부입니다. Java 런타임 환경(JRE). 다른 프로그래밍 언어에서는 컴파일러가 특정 시스템에 대한 기계어 코드를 생성합니다. 하지만, Java 컴파일러는 다음과 같은 가상 머신용 코드를 생성합니다. Java 가상 기기.
JVM은 어떻게 작동하나요?
첫째, Java 코드는 바이트코드로 컴파일됩니다. 이 바이트코드는 다른 머신에서 해석됩니다. 호스트 시스템과 Java 소스, 바이트코드는 중간 언어입니다. JVM in Java 메모리 공간을 할당하는 역할을 합니다.

이 JVM 튜토리얼에서는 다음과 같은 내용을 배울 수 있습니다.
ArchiJVM의 구조(Java 가상 머신)
이제 이 JVM 튜토리얼에서 ArchiJVM의 구조. JVM 아키텍처 Java 클래스로더, 메모리 영역, 실행 엔진 등을 포함합니다.

1) 클래스로더
클래스 로더는 클래스 파일을 로딩하는 데 사용되는 하위 시스템입니다. 로딩, 링크, 초기화의 세 가지 주요 기능을 수행합니다.
2) 방법 영역
JVM 메소드 영역은 메타데이터, 상수 런타임 풀, 메소드 코드와 같은 클래스 구조를 저장합니다.
3) 힙
모든 사물, 관련 인스턴스 변수 및 배열이 힙에 저장됩니다. 이 메모리는 공통적이며 여러 스레드에서 공유됩니다.
4) JVM 언어 스택
Java 언어 스택은 로컬 변수와 부분적인 결과를 저장합니다. 각 스레드는 스레드가 생성되는 동시에 생성되는 자체 JVM 스택을 가지고 있습니다. 메서드가 호출될 때마다 새 프레임이 생성되고 메서드 호출 프로세스가 완료되면 삭제됩니다.
5) PC 레지스터
PC 레지스터에 주소를 저장합니다. Java 현재 실행 중인 가상 머신 명령입니다. ~ 안에 Java, 각 스레드에는 별도의 PC 레지스터가 있습니다.
6) 네이티브 메소드 스택
네이티브 메소드 스택은 네이티브 라이브러리에 따라 네이티브 코드의 명령을 보유합니다. 대신에 다른 언어로 쓰여 있습니다. Java.
7) 실행 엔진
하드웨어, 소프트웨어 또는 전체 시스템을 테스트하는 데 사용되는 소프트웨어 유형입니다. 테스트 실행 엔진은 테스트된 제품에 대한 어떠한 정보도 전달하지 않습니다.
8) 네이티브 메소드 인터페이스
기본 메소드 인터페이스는 프로그래밍 프레임워크입니다. 그것은 허용한다 Java 라이브러리 및 기본 애플리케이션에서 호출하기 위해 JVM에서 실행되는 코드입니다.
9) 네이티브 메소드 라이브러리
네이티브 라이브러리는 네이티브 라이브러리(C, C++) 실행 엔진에 필요한 것입니다.
소프트웨어 코드 컴파일 및 실행 프로세스
소프트웨어 프로그램을 작성하고 실행하려면 다음이 필요합니다.
1) 편집자 – 프로그램을 입력하려면 메모장을 사용할 수 있습니다.
2) 컴파일러 – 고급 언어 프로그램을 기본 기계어 코드로 변환하려면
3) 링커 – 기본 프로그램에서 서로 다른 프로그램 파일 참조를 함께 결합합니다.
4) 로더 – 실행을 위해 하드 디스크, 플래시 드라이브, CD와 같은 보조 저장 장치의 파일을 RAM에 로드합니다. 코드를 실행하면 로딩이 자동으로 수행됩니다.
5) 실행 – OS 및 프로세서에서 처리하는 코드의 실제 실행.
이러한 배경을 바탕으로 다음 비디오를 참조하고 JVM의 내부 작동 및 아키텍처를 알아보세요.Java 가상 기기).
LINK 비디오에 접근할 수 없는 경우
C 코드 컴파일 및 실행 프로세스
이해하기 Java 컴파일 과정 Java먼저, C에서 컴파일하고 링크하는 과정을 간단히 살펴보겠습니다.
메인에서 두 함수 f1과 f2를 호출했다고 가정합니다. 메인 함수는 파일 a1.c에 저장됩니다.
함수 f1은 a2.c 파일에 저장됩니다.
함수 f2은 a3.c 파일에 저장됩니다.
이 모든 파일, 즉 a1.c, a2.c, a3.c는 컴파일러에 공급됩니다. 그 출력은 기계 코드인 해당 객체 파일입니다.
다음 단계는 링커를 사용하여 이러한 모든 개체 파일을 단일 .exe 파일로 통합하는 것입니다. 링커는 이러한 모든 파일을 하나로 묶고 .exe 파일을 생성합니다.
프로그램이 실행되는 동안 로더 프로그램은 a.exe를 로드합니다. 램 실행을 위해.
Java 코드 컴파일 및 실행 Java VM
이제 이 JVM 튜토리얼에서는 JAVA 프로세스를 살펴보겠습니다. 기본에는 f1과 f2의 두 가지 방법이 있습니다.
- 주요 메소드는 a1.java 파일에 저장됩니다.
- f1은 a2.java로 파일에 저장됩니다.
- f2은 a3.java로 파일에 저장됩니다.
컴파일러는 3개의 파일을 컴파일하고 BYTE 코드로 구성된 XNUMX개의 해당 .class 파일을 생성합니다. C와 달리 링크가 수행되지 않습니다..
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 Java VM 또는 Java 가상 머신은 RAM에 상주합니다. 실행 중에 클래스 로더를 사용하여 클래스 파일을 RAM으로 가져옵니다. BYTE 코드는 보안 위반이 있는지 확인합니다.
다음으로 실행 엔진은 바이트코드를 네이티브 머신 코드로 변환합니다. 이는 적시에 컴파일하는 것입니다. 이것이 주요 이유 중 하나입니다. Java 비교적 느립니다.
알림: JIT 또는 Just-in-time 컴파일러는 다음의 일부입니다. Java 가상 머신(JVM). 유사한 기능을 가진 바이트 코드의 일부를 동시에 해석합니다.
왜? Java 해석된 언어와 컴파일된 언어 모두?
프로그래밍 언어 로 분류된다
- 고급 언어 Ex. C++, Java
- 중급 언어 Ex. 씨
- 저수준 언어 예 Assembly
- 마지막으로 기계 언어로서 가장 낮은 수준입니다.
A 컴파일러 프로그램을 한 수준의 언어에서 다른 수준으로 변환하는 프로그램입니다. 변환 예 C++ 프로그램을 기계 코드로 변환합니다. 자바 컴파일러는 고급 자바 코드를 바이트코드(또한 기계 코드의 한 유형)로 변환합니다.
An 통역사 한 수준의 프로그램을 다른 수준의 프로그래밍 언어로 변환하는 프로그램입니다. 같은 수준. 변환 예 Java 프로그래밍하다 C++
In JavaJIT(Just In Time) 코드 생성기는 바이트코드를 동일한 프로그래밍 수준에 있는 네이티브 머신 코드로 변환합니다.
금후, Java 컴파일된 언어와 해석된 언어 모두입니다.
왜? Java 느린?
속도가 느려지는 두 가지 주요 이유 Java are
- 동적 연결: C와 달리 연결은 프로그램이 실행될 때마다 런타임에 수행됩니다. Java.
- 런타임 통역사: 바이트 코드를 기본 기계어 코드로 변환하는 작업은 런타임에 수행됩니다. Java 그러면 속도가 더 느려집니다.
그러나 최신 버전의 Java 성능 병목 현상을 상당 부분 해결했습니다.
요약:
- JVM의 전체 형태는 다음과 같습니다. Java 가상 머신. JVM Java 을 구동하는 엔진이다 Java 암호. 그것은 변환한다 Java 바이트 코드를 기계 언어로 변환합니다.
- JVM 아키텍처 Java 클래스로더, 메모리 영역, 실행 엔진 등을 포함합니다.
- JVM에서는 Java 코드는 바이트코드로 컴파일됩니다. 이 바이트코드는 다른 시스템에서 해석됩니다.
- JIT는 Just-in-time 컴파일러를 의미합니다. JIT는 Java 가상 머신(JVM)은 실행 시간을 단축하는 데 사용됩니다.
- 다른 컴파일러 시스템과 비교하여 JVM은 Java 실행 속도가 느려질 수 있습니다.