산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

JVM | Java 가상 머신이란 무엇이며 아키텍처

JVM이란 무엇입니까?

자바 가상 머신(JVM) 자바 코드 또는 애플리케이션을 구동하기 위한 런타임 환경을 제공하는 엔진입니다. Java 바이트 코드를 기계어로 변환합니다. JVM은 JRE(Java Runtime Environment)의 일부입니다. 다른 프로그래밍 언어에서 컴파일러는 특정 시스템에 대한 기계어 코드를 생성합니다. 그러나 Java 컴파일러는 Java Virtual Machine으로 알려진 가상 머신용 코드를 생성합니다.

JVM 작동 방식은 다음과 같습니다.

먼저 Java 코드를 바이트 코드로 컴파일합니다. 이 바이트코드는 다른 시스템에서 해석됩니다.

호스트 시스템과 자바 소스 사이에서 바이트코드는 중간 언어입니다.

Java의 JVM은 메모리 공간 할당을 담당합니다.

<중앙>

<그림>

이 JVM 튜토리얼에서 배우게 될 것입니다-

JVM 아키텍처

이제 이 JVM 튜토리얼에서 JVM의 아키텍처를 이해합시다. Java의 JVM 아키텍처에는 클래스 로더, 메모리 영역, 실행 엔진 등이 포함됩니다.

<중앙>

<그림>

1) 클래스 로더

클래스 로더는 클래스 파일을 로드하는 데 사용되는 하위 시스템입니다. 그것은 세 가지 주요 기능을 수행합니다. 로드, 연결 및 초기화.

2) 방법 영역

JVM 메소드 영역은 메타데이터, 상수 런타임 풀 및 메소드용 코드와 같은 클래스 구조를 저장합니다.

3) 힙

모든 객체, 관련 인스턴스 변수 및 배열은 힙에 저장됩니다. 이 메모리는 공통이며 여러 스레드에서 공유됩니다.

4) JVM 언어 스택

Java 언어 스택은 지역 변수를 저장하며 이는 부분적인 결과입니다. 각 스레드에는 스레드가 생성될 때 동시에 생성되는 자체 JVM 스택이 있습니다. 메서드가 호출될 때마다 새 프레임이 생성되고 메서드 호출 프로세스가 완료되면 삭제됩니다.

5) PC 레지스터

PC 레지스터는 현재 실행 중인 자바 가상 머신 명령어의 주소를 저장합니다. Java에서 각 스레드에는 별도의 PC 레지스터가 있습니다.

6) 기본 메소드 스택

네이티브 메서드 스택은 네이티브 라이브러리에 따라 네이티브 코드의 명령을 보유합니다. Java가 아닌 다른 언어로 작성되었습니다.

7) 실행 엔진

하드웨어, 소프트웨어 또는 전체 시스템을 테스트하는 데 사용되는 소프트웨어 유형입니다. 테스트 실행 엔진은 테스트된 제품에 대한 정보를 절대 전달하지 않습니다.

8) 네이티브 메소드 인터페이스

Native Method Interface는 프로그래밍 프레임워크입니다. JVM에서 실행되는 Java 코드가 라이브러리 및 기본 애플리케이션에서 호출할 수 있도록 합니다.

9) 네이티브 메소드 라이브러리

Native Libraries는 Execution Engine에 필요한 Native Libraries(C, C++)의 모음입니다.

소프트웨어 코드 컴파일 및 실행 프로세스

소프트웨어 프로그램을 작성하고 실행하려면 다음이 필요합니다.

1) 편집자 – 프로그램을 입력하기 위해 메모장을 사용할 수 있습니다.

2) 컴파일러 – 고급 언어 프로그램을 기본 기계 코드로 변환하기 위해

3) 링커 – 메인 프로그램에서 서로 다른 프로그램 파일 참조를 결합하기 위해.

4) 로더 – 실행을 위해 하드 디스크, 플래시 드라이브, CD와 같은 보조 저장 장치에서 파일을 RAM으로 로드합니다. 코드를 실행하면 로딩이 자동으로 완료됩니다.

5) 실행 – OS 및 프로세서가 처리하는 코드의 실제 실행

이러한 배경지식을 가지고 다음 영상을 참고하여 JVM(Java Virtual Machine)의 JVM 내부 동작과 아키텍처를 배워보세요.

동영상에 액세스할 수 없는 경우 여기를 클릭하십시오.

C 코드 컴파일 및 실행 프로세스

Java에서 Java 컴파일 프로세스를 이해합니다. 먼저 C의 컴파일 및 링크 프로세스를 간단히 살펴보겠습니다.

메인에서 두 개의 함수 f1과 f2를 호출했다고 가정합니다. 주요 기능은 파일 a1.c에 저장됩니다.

함수 f1은 a2.c 파일에 저장됩니다.

함수 f2는 3.c 파일에 저장됩니다.

이러한 모든 파일, 즉 a1.c, a2.c 및 a3.c는 컴파일러에 제공됩니다. 출력은 기계어 코드인 해당 오브젝트 파일입니다.

다음 단계는 링커를 사용하여 이러한 모든 개체 파일을 단일 .exe 파일로 통합하는 것입니다. 링커는 이러한 모든 파일을 하나로 묶고 .exe 파일을 생성합니다.

프로그램이 실행되는 동안 로더 프로그램은 실행을 위해 a.exe를 RAM에 로드합니다.

자바 VM에서 자바 코드 컴파일 및 실행

이제 이 JVM 튜토리얼에서 JAVA에 대한 프로세스를 살펴보겠습니다. 메인에는 f1과 f2의 두 가지 방법이 있습니다.

컴파일러는 3개의 파일을 컴파일하고 BYTE 코드로 구성된 3개의 해당 .class 파일을 생성합니다. C와 달리 연결이 수행되지 않음 .

Java VM 또는 Java 가상 머신은 RAM에 상주합니다. 실행하는 동안 클래스 로더를 사용하여 클래스 파일을 RAM으로 가져옵니다. BYTE 코드는 보안 위반에 대해 확인됩니다.

다음으로 실행 엔진은 바이트코드를 네이티브 머신 코드로 변환합니다. 이것은 단지 시간 컴파일 중입니다. 자바가 상대적으로 느린 이유 중 하나입니다.

참고: JIT 또는 Just-in-time 컴파일러는 JVM(Java Virtual Machine)의 일부입니다. 유사한 기능을 가진 바이트 코드의 일부를 동시에 해석합니다.

Java가 해석 및 컴파일 언어인 이유는 무엇입니까?

프로그래밍 언어는 다음과 같이 분류됩니다.

컴파일러 프로그램을 한 수준의 언어에서 다른 수준으로 변환하는 프로그램입니다. C++ 프로그램을 기계어로 변환하는 예

자바 컴파일러는 고급 자바 코드를 바이트코드(기계어 코드의 일종)로 변환합니다.

통역사 한 수준의 프로그램을 동일한 수준의 다른 프로그래밍 언어로 변환하는 프로그램입니다. Java 프로그램을 C++로 변환하는 예

Java에서 Just In Time Code 생성기는 바이트코드를 동일한 프로그래밍 수준에 있는 기본 기계어로 변환합니다.

따라서 Java는 컴파일된 언어일 뿐만 아니라 해석된 언어입니다.

Java가 느린 이유는 무엇입니까?

Java 속도가 느린 두 가지 주요 이유는

  1. 동적 연결: C와 달리 자바에서 프로그램이 실행될 때마다 링크가 실행됩니다.
  2. 런타임 인터프리터: 바이트 코드를 기본 기계어로 변환하는 작업은 Java에서 런타임에 수행되므로 속도가 더욱 느려집니다.

그러나 최신 버전의 Java는 성능 병목 현상을 상당 부분 해결했습니다.

요약 :


java

  1. CNC란 무엇입니까?
  2. Java 10 - 스레드 로컬 핸드셰이크
  3. 머신 터닝이란 무엇입니까?
  4. 건축 설계란 무엇입니까?
  5. 머신 볼트란 무엇입니까?
  6. 방적기란 무엇입니까?
  7. 우유 자판기란?
  8. 수평 보링 머신이란 무엇입니까?
  9. 자동 프레스 기계 란 무엇입니까?
  10. 머신 텐딩이란