JVM이란 무엇인가요? JVM에 대해 설명해 주세요. Archi강의
⚡ 스마트 요약
Java JVM(Java Virtual Machine)은 실행 환경을 제공하는 엔진입니다. Java 플랫폼 독립적인 바이트코드를 네이티브 기계어로 변환하는 코드입니다. 이는 다음의 일부를 구성합니다. Java 런타임 환경을 활성화합니다. Java한 번 작성하면 어디서든 실행할 수 있는 이식성을 제공합니다.

JVM이란 무엇입니까? Java?
Java 가상 머신(JVM) 구동하기 위한 런타임 환경을 제공하는 엔진입니다. Java 코드 또는 애플리케이션입니다. 변환합니다. Java 바이트코드를 기계어로 변환합니다. JVM은 Java JRE(JavaScript Runtime Environment)는 다른 프로그래밍 언어에서는 컴파일러가 특정 시스템에 맞는 기계어 코드를 생성하는 반면, 다른 프로그래밍 언어에서는 컴파일러가 특정 시스템에 맞는 기계어 코드를 생성하는 데 사용됩니다. Java 컴파일러는 가상 머신(Virtual Machine)용 코드를 생성합니다. Java 가상 기기.
JVM은 어떻게 작동하나요?
첫째, Java 코드는 바이트코드로 컴파일됩니다. 이 바이트코드는 서로 다른 컴퓨터에서 해석됩니다. 호스트 시스템과 다른 컴퓨터 간에는 이러한 과정이 필요합니다. Java 소스 코드에서 바이트코드는 중간 언어입니다. JVM은 Java 메모리 공간을 할당하는 역할을 합니다.
작업 Java 가상 머신(JVM)
ArchiJVM의 구조(Java 가상 머신)
이제 JVM의 아키텍처를 이해해 보겠습니다. JVM 아키텍처는 다음과 같습니다. Java 클래스 로더, 메모리 영역, 실행 엔진 등을 포함합니다.
Java 가상 기기 Archi강의
1) 클래스로더
클래스 로더는 클래스 파일을 불러오는 데 사용되는 서브시스템입니다. 주요 기능은 로딩, 링크, 초기화 세 가지입니다.
2) 방법 영역
JVM 메서드 영역에는 메타데이터, 상수 런타임 풀, 메서드 코드와 같은 클래스 구조가 저장됩니다.
3) 힙
모든 사물, 관련 인스턴스 변수 및 배열이 힙에 저장됩니다. 이 메모리는 공통적이며 여러 스레드에서 공유됩니다.
4) JVM 언어 스택
Java 언어 스택은 지역 변수와 그 부분적인 결과를 저장합니다. 각 스레드는 스레드 생성과 동시에 생성되는 자체 JVM 스택을 갖습니다. 메서드가 호출될 때마다 새로운 스택 프레임이 생성되고, 메서드 호출 프로세스가 완료되면 삭제됩니다.
5) PC 레지스터
PC 레지스터에는 주소가 저장됩니다. Java 현재 실행 중인 가상 머신 명령어입니다. Java각 스레드는 자체적인 PC 레지스터를 가지고 있습니다.
6) 네이티브 메소드 스택
네이티브 메서드 스택은 네이티브 라이브러리에 의존하는 네이티브 코드의 명령어를 저장합니다. 이는 네이티브 코드 대신 다른 언어로 작성됩니다. Java.
7) 실행 엔진
실행 엔진은 바이트코드를 읽어 부분별로 실행합니다. 실행 엔진은 인터프리터와 JIT(Just-In-Time) 컴파일러를 사용하여 바이트코드를 네이티브 기계어로 변환하고 실행합니다.
8) 네이티브 메서드 인터페이스
기본 메소드 인터페이스는 프로그래밍 프레임워크입니다. 그것은 허용한다 Java JVM에서 실행되는 코드가 네이티브 애플리케이션 및 라이브러리를 호출하고, 또한 네이티브 애플리케이션 및 라이브러리로부터 호출될 수 있도록 하는 코드입니다.
9) 네이티브 메소드 라이브러리
Native Libraries는 네이티브 라이브러리(C, C++) 실행 엔진에 필요한 것입니다.
소프트웨어 Code 컴파일 및 실행 프로세스
소프트웨어 프로그램을 작성하고 실행하려면 다음이 필요합니다.
- 1) 편집자 - 프로그램을 입력하려면 메모장을 사용할 수 있습니다.
- 2) 컴파일러 고급 언어 프로그램을 네이티브 기계어 코드로 변환합니다.
- 3) 링커 - 메인 프로그램에서 여러 프로그램 파일 참조를 하나로 통합하려면.
- 4) 로더 - 하드 디스크, USB 플래시 드라이브 또는 CD와 같은 보조 저장 장치의 파일을 실행을 위해 RAM으로 로드합니다. 로딩은 코드 실행 시 자동으로 수행됩니다.
- 5) 실행 - 실제 코드 실행은 운영체제와 프로세서에 의해 처리됩니다.
이러한 배경지식을 바탕으로, 다음 영상을 참고하여 JVM의 내부 작동 방식과 아키텍처를 학습하십시오.Java 가상 기기).
여기에서 확인하세요 비디오에 접근할 수 없는 경우
C 코드 컴파일 및 실행 프로세스
이해하기 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
자, 이제 그 과정을 살펴보겠습니다. Java메인 메서드에는 f1과 f2라는 두 개의 메서드가 있습니다.
- main 메서드는 a1.java 파일에 저장되어 있습니다.
- f1은 a2.java로 파일에 저장됩니다.
- f2은 a3.java로 파일에 저장됩니다.
컴파일러는 세 개의 파일을 컴파일하여 BYTE 코드로 구성된 세 개의 해당 .class 파일을 생성합니다. C 언어와는 달리 링크 작업이 수행되지 않습니다.
The Java VM 또는 Java 가상 머신은 RAM에 상주합니다. 실행 중에 클래스 로더를 사용하여 클래스 파일이 RAM으로 로드됩니다. 바이트 코드는 보안 취약점이 있는지 검증됩니다.
다음으로 실행 엔진은 바이트코드를 네이티브 기계어로 변환합니다. 이것이 바로 JIT(Just-In-Time) 컴파일입니다. 이것이 바로 JIT 컴파일이 가능한 주요 이유 중 하나입니다. Java 비교적 느립니다.
알림: JIT, 즉 Just-in-time 컴파일러는 다음의 일부입니다. Java 자바스크립트 가상 머신(JVM)은 유사한 기능을 동시에 수행하는 바이트 코드의 일부를 해석합니다.
왜? Java 해석된 언어와 컴파일된 언어 모두?
프로그래밍 언어 다음과 같이 분류됩니다:
- 고급 언어, 예: C++, Java
- 중급 언어, 예: C
- 저수준 언어, 예: Assembly
- 마지막으로 가장 낮은 수준은 기계어입니다.
A 컴파일러 한 언어 수준의 프로그램을 다른 언어 수준으로 변환하는 프로그램입니다. 예를 들어, 변환은 다음과 같습니다. C++ 프로그램을 기계어로 변환합니다. Java 컴파일러는 고수준 언어를 변환합니다. Java 코드를 바이트코드(역시 기계어의 일종)로 변환합니다.
An 통역사 한 수준의 프로그램을 다른 프로그래밍 언어 수준으로 변환하는 프로그램입니다. 같은 수준예를 들어, 변환 Java 프로그래밍하다 C++.
In JavaJIT(Just-In-Time) 코드 생성기는 바이트코드를 네이티브 머신 코드로 변환하는데, 이 두 코드는 동일한 프로그래밍 레벨에 있습니다. 따라서, Java 컴파일 언어이기도 하고 인터프리터 언어이기도 합니다.
왜? Java 느린?
속도가 느려지는 두 가지 주요 이유 Java 위치 :
- 동적 연결: C와 달리 연결은 프로그램이 실행될 때마다 런타임에 수행됩니다. Java.
- 런타임 통역사: 바이트 코드를 기본 기계어 코드로 변환하는 작업은 런타임에 수행됩니다. Java이는 속도를 더욱 늦춥니다.
하지만 최신 버전에서는 Java 이러한 성능 병목 현상을 상당 부분 해결했습니다.











