컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 가상 머신이란 무엇인가요?

가상 머신이란 무엇인가요?

가상 머신(Virtual Machine)은 소프트웨어로 시뮬레이션되고 완전히 격리된 환경에서 실행되는 완전한 하드웨어 시스템 기능을 갖춘 완전한 컴퓨터 시스템을 의미합니다.

1. 기본 개념

일반적인 의미의 가상 머신:

가상 머신 소프트웨어를 통해 물리적 컴퓨터에서 하나 이상의 가상 머신을 시뮬레이션할 수 있습니다. 이러한 가상 머신은 실제 컴퓨터와 똑같이 작동합니다. 예를 들어 운영 체제 설치, 애플리케이션 설치, 네트워크 리소스 액세스 등을 수행할 수 있습니다. 여러분에게는 물리적 컴퓨터에서 실행되는 애플리케이션일 뿐이지만, 가상 머신에서 실행되는 애플리케이션에게는 실제 컴퓨터에서 작업하는 것과 같습니다. 따라서 가상머신에서 소프트웨어 평가를 진행하면 시스템도 충돌이 나는 경우가 있는데, 물리적 컴퓨터의 운영체제가 아닌 가상머신의 운영체제만 충돌하고, 가상머신의 "실행 취소"(복구)를 사용합니다. ) 기능을 사용하면 가상 머신을 소프트웨어 설치 전 상태로 즉시 복원할 수 있습니다.

[이 단락 편집] 2. 주류 가상 머신

현재 널리 사용되는 가상 머신 소프트웨어에는 Windows 시스템에서 많은 가상 머신을 가상화할 수 있는 VMware(VMWare ACE) 및 Virtual PC가 포함됩니다. . Linux, OS/2, FreeBSD 및 기타 운영 체제를 설치하기 위한 컴퓨터입니다. Microsoft는 2003년 2월 Connectix를 인수한 후 신속하게 Microsoft Virtual PC 2004를 출시했습니다. 그러나 다양한 고려 사항으로 인해 새로 출시된 Virtual PC 2004는 더 이상 Linux, FreeBSD, NetWare, Solaris 및 기타 운영 체제를 명시적으로 지원하지 않으며 OS/2만 유지합니다. Linux 컴퓨터를 가상화하려는 경우 OS/2만 설정할 수 있습니다. 수동으로 올려요. 이에 비해 VMware는 다중 운영 체제 지원 및 실행 효율성 측면에서 Virtual PC 2004보다 훨씬 높습니다. 한 대의 컴퓨터가 두 대가 되므로 더 이상 Linux 사용법을 배우는 것에 대해 걱정할 필요가 없습니다.

Octopus 머신이라고도 알려진 2세대 가상 머신은 기존 가상 호스트보다 공격, 하드웨어 손상, 데이터 센터 사고에 더 강합니다. 이는 기존 가상호스트의 개념적 변화로 가상호스트 업그레이드 시스템에 속한다. 근접한 접근과 빠른 응답 특성 때문입니다. 전체 시스템 전환에는 엄격한 규칙이 있으며 작동 중에 매칭이 자동으로 완료됩니다. "일반적으로 클러스터 공간으로 알려진 이는 기존 인터넷에 새로운 네트워크 아키텍처 계층을 추가하여 CDN, 지능형 도메인 이름 확인, 로드 밸런싱 시스템 및 기타 새로운 네트워크 기술을 결합한 산물입니다. 기존 가상 호스트에 개념을 가져옵니다. 세계에서 가장 최신의 독창적이고 가장 안정적인 가상 호스트로, 사용자에게 고성능 및 비용 효율적인 가상 호스트 기술을 제공하여 사용자가 최소한의 투자로 대형 웹사이트만이 누릴 수 있는 운영 기술을 갖도록 돕습니다. 2세대 개념의 가상 호스트 시스템은 시스템에서 실행되는 공간에 대형 웹사이트의 운영 표준을 채택하여 모든 중소 규모 웹사이트가 대형 웹사이트의 대우를 받을 수 있도록 하며 정상적이고 빠르게 작동하도록 합니다. 언제 어디서 액세스하든 작은 웹사이트를 구현하면 큰 변화를 가져올 수 있습니다.

[이 단락 편집] 3. 가상화 분류

Microsoft 가상화

IBM 가상화

HP 가상화

SWsoft 가상화

SUN 가상화

Intel 가상화

AMD 가상화

Java Virtual Machine

VMware 4.5에는 Workstation, GSX 서버 등 다양한 버전이 있으며 그 중 Windows 버전의 Workstation이 가장 널리 사용됩니다. .

가상 머신의 개념은 비교적 광범위합니다. 사람들이 일반적으로 접하는 가상 머신 개념에는 VMware와 같은 하드웨어 시뮬레이션 소프트웨어, 하드웨어와 컴파일러 사이에 있는 JVM과 같은 소프트웨어가 포함됩니다. 여기서 언급하는 것은 후자이다.

가상 머신은 실제 컴퓨터처럼 명령어 세트가 있고 다양한 저장 영역을 사용하는 추상적인 컴퓨터입니다. 명령을 실행하고 데이터, 메모리 및 레지스터를 관리하는 역할을 담당합니다. 이 가상 머신은 모든 플랫폼의 컴파일러에 일관된 인터페이스를 제공합니다. 컴파일러는 가상 머신을 지향하고 가상 머신이 이해할 수 있는 코드를 생성하기만 하면 통역사가 가상 머신 코드를 특정 시스템의 실행을 위한 머신 코드로 변환합니다.

Sun xVM VirtualBox가 새 버전인 2.1.0을 출시했습니다.

2.1.0은 이전 2.0.X와 달리 주로 버그 수정과 기존 기능 개선이 이루어졌습니다. VBox 사용자는 업데이트를 적극 권장합니다!

공식 웹사이트의 ChangeLog에서 이 버전의 주요 업데이트 정보를 확인할 수 있습니다.

* Max OS X 클라이언트의 하드웨어 가상화 기술 지원(VT-x 및 AMD - V);

* 32비트 운영 체제에서 64비트 클라이언트 시뮬레이션을 지원합니다! (실험적 성격이므로 자세한 내용은 사용 설명서를 참조하세요.);

* Intel Nehalem 가상화 향상 기술 지원(EPT 및 VPID, 자세한 내용은 사용 설명서를 참조하세요.)

* OpenGL을 통해 3D 가속을 지원합니다! (사용 설명서 4.8장 참조);

더 많은 업데이트가 있지만 위의 네 가지만으로도 사용자가 업그레이드할 이유가 충분합니다!

VirtualBox는 마침내 OpenGL 실험을 통해 3D 가속을 지원하며, 32비트 운영 체제에서 64비트 클라이언트 시뮬레이션을 최초로 지원합니다(64비트 CPU 지원 필요). 이는 가상 머신 플랫폼의 제한이 덜하고 x86 플랫폼에서 AMD64를 에뮬레이트할 수 있음을 의미합니다!

"OpenGL 3D 가속" 항목과 관련하여 이 기능은 현재 Windows 시스템에서만 사용할 수 있으며 OpenGL 가속만 가능하고 Direct3D 가속은 불가능하다는 것을 알게 되었습니다. 이는 이미 Windows 가상 머신에서 일부 OpenGL 3D 애플리케이션을 실행할 수 있지만 Direct3D는 조금 더 기다려야 함을 의미합니다.

많이 개선된 버전이라니 무엇을 기다리고 계시나요? 서둘러 다운로드하여 사용해 보세요:

[이 단락 편집] 4. 가상 머신을 사용하는 이유

1. 데모 환경, 다양한 예제를 촉진하기 위해 다양한 데모 환경을 설치할 수 있습니다.

p>

2. 호스트의 빠른 작동을 보장하고 불필요한 정크 설치 프로그램, 가끔 사용되는 프로그램 또는 가상 머신에서 실행되는 테스트 프로그램을 줄입니다.

3. 매번 다시 시작하지 마세요. 설치, 뱅킹 등 일반적인 도구는 자주 사용하지 않으며 기밀로 유지하고 별도의 환경에서 실행해야 합니다.

4. 익숙하지 않은 응용 프로그램을 테스트하려면 설치하고 철저하게 수행하십시오. 삭제

5. Linux, Mac 등 다양한 버전의 운영 체제를 경험해 보세요.

터미널 가상화는 점유 공간 감소, 소프트웨어 및 하드웨어 장비 구매 비용 감소, 에너지 절약 및 유지 관리 비용 절감 등 유지 관리 비용이 크게 절감되기 때문에 널리 사용됩니다. 실제 단말 장비보다 비용 효율적인 장점이 있습니다. 그러나 이것이 교육 산업과 제조업체가 가상화 기술에 애착을 갖는 유일한 이유는 아닙니다. 반면에 우리가 거의 언급하지 않는 것은 가상화 기술이 시스템 보안을 크게 향상시킬 수 있다는 것입니다.

[이 단락 편집] 5. VMware 가상 머신 설치 프로세스

VMware Workstation 가상 머신은 Windows 또는 Linux 컴퓨터에서 실행되는 애플리케이션으로 x86 기반 표준을 시뮬레이션할 수 있습니다. PC환경. 이 환경은 칩셋, CPU, 메모리, 그래픽 카드, 사운드 카드, 네트워크 카드, 플로피 드라이브, 하드 디스크, 광학 드라이브, 직렬 포트, 병렬 포트, USB 컨트롤러, SCSI 컨트롤러 및 기타 장치를 갖춘 실제 컴퓨터와 동일합니다. 이 애플리케이션을 제공하는 창은 가상 머신의 모니터입니다.

사용 측면에서 이 가상 머신은 실제 물리적 호스트와 크게 다르지 않습니다. 파티션 나누기, 포맷, 운영 체제 설치, 애플리케이션 및 소프트웨어 설치가 필요합니다. 간단히 말해서 모든 작업이 동일합니다. .실제 컴퓨터와 같습니다.

다음은 예제를 사용하여 VMware Workstation을 사용하여 가상 머신을 생성하는 방법과 단계를 소개합니다.

1. VMware Workstation 6을 실행하고 "파일→새로 만들기→가상 머신" 명령을 클릭하여 가상 머신 생성 마법사로 들어가거나, 직접 "Crtl N" 단축키를 눌러 가상 머신 생성 마법사로 들어갑니다. .

2. 팝업 환영 페이지에서 '다음' 버튼을 클릭하세요.

3. "가상 머신 구성" 옵션 영역에서 "사용자 정의" 라디오 버튼을 선택합니다.

4. 가상 머신 하드웨어 호환성 선택 페이지의 하드웨어 호환성 드롭다운 목록에서 VMware Workstation 6, VMware Workstation 5 또는 VMware Workstation 4를 선택할 수 있습니다. 상자 중에서 선택하세요. 일반적으로 새로운 가상 머신 하드웨어 형식이 더 많은 기능을 지원하기 때문에 Workstation 6 형식을 선택합니다. 선택한 후 "다음" 버튼을 클릭합니다.

5. 게스트 운영 체제 선택 대화 상자에서 생성할 가상 머신 유형과 실행할 운영 체제를 선택합니다. 여기에서 Windows 2000 Professional 운영 체제를 선택하고 "다음"을 클릭합니다. 단추.

6. 가상 머신 이름 지정 대화 상자에서 새 가상 머신의 이름을 지정하고 저장 경로를 선택합니다.

7. 프로세서 옵션 영역에서 가상 머신의 CPU 수를 선택합니다. 2개를 선택하는 경우 호스트에는 2개의 CPU 또는 하이퍼 스레드 CPU가 있어야 합니다.

8. 가상 머신용 메모리 페이지에서 가상 머신이 사용하는 메모리를 설정합니다. 일반적으로 Windows 98 이하 시스템의 경우 Windows 2000/XP의 경우 최소 64MB를 설정할 수 있습니다. Windows 2003의 경우 최소 128MB, Windows Vista 가상 머신의 경우 최소 512MB입니다.

9. 네트워크 유형 페이지에서 가상 머신 네트워크 카드의 "네트워크 유형"을 선택합니다.

첫 번째 항목을 선택하고 브리지된 네트워크 카드(VMnet0 가상 네트워크 카드)를 사용합니다. 동일한 네트워크에 있는 현재 가상 머신과 호스트(VMware Workstation 소프트웨어를 실행하는 컴퓨터 참조)를 나타냅니다.

두 번째 옵션인 NAT 네트워크 카드(VMnet8 가상 네트워크 카드)를 선택합니다. 이는 가상 머신이 호스트에 있는 컴퓨터를 통해 호스트와 호스트 외부 네트워크에 단방향으로 액세스할 수 있음을 의미합니다. 호스트 이외의 네트워크는 가상 머신에 액세스할 수 없습니다.

세 번째 옵션을 선택하면 로컬 네트워크(VMnet1 가상 네트워크 카드)만 사용합니다. 즉, 가상 머신은 VMnet1 가상 네트워크 카드를 사용하는 호스트와 모든 가상 머신에만 액세스할 수 있습니다. 호스트 외부 네트워크의 컴퓨터는 가상 머신에 액세스할 수 없으며 가상 머신에서도 액세스할 수 없습니다.

네 번째 항목인 네트워크 연결 없음을 선택하면 가상 머신이 호스트와 네트워크에 연결되어 있지 않음을 나타냅니다.

10. I/O 어댑터 유형 선택 페이지에서 가상 머신의 SCSI 카드 모델을 선택합니다. 일반적으로 기본값을 선택합니다.

11. 디스크 선택 페이지에서 새 가상 디스크 생성을 선택합니다.

12. 디스크 유형 선택 페이지에서 생성된 가상 하드 디스크의 인터페이스 모드를 선택합니다. 일반적으로 기본값을 선택합니다.

13. 디스크 용량 지정 페이지에서 가상 디스크 크기를 설정합니다. 일반적인 사용의 경우 기본값을 선택합니다.

14. 디스크 파일 지정 페이지의 디스크 파일 옵션 영역에서 가상 디스크 파일 이름을 설정합니다. 일반적으로 기본값을 선택한 후 마침 버튼을 클릭합니다.

운영체제 설치

가상 머신에 운영체제를 설치하는 것은 실제 컴퓨터에 설치하는 것과 다르지 않습니다. 하지만 가상 머신에 운영체제를 설치하는 경우에는 호스트에 있는 설치 CD 이미지(또는 플로피 디스크 이미지)는 가상 머신의 CD-ROM 드라이브(또는 플로피 드라이브) 역할을 합니다.

가상 머신 설정 페이지의 하드웨어 탭에서 이전에 생성된 Windows 2000 가상 머신 구성 파일을 열 수 있습니다. CD-ROM 항목을 선택하고 연결 옵션 영역에서 ISO 이미지 사용 라디오 버튼을 선택하세요. . 를 클릭한 다음 Windows 2000 설치 CD 이미지 파일(ISO 형식)을 찾아 선택합니다. 설치 CD를 사용하는 경우 물리적 드라이브 사용을 선택하고 설치 CD가 있는 CD-ROM 드라이브를 선택합니다.

광 드라이브를 선택한 후 툴바에서 재생 버튼을 클릭하고 가상머신의 전원을 켠 후 가상머신 작업창에서 마우스로 한 번 클릭하면 가상머신에 진입합니다.

가상 머신 창에서 호스트로 다시 전환하려면 Ctrl Alt 단축키를 눌러야 합니다.

VMware Tools 설치

가상머신에 운영체제를 설치한 후 VMware Tools를 설치해야 합니다. VMware Tools는 VMware 가상 머신의 마더보드 칩셋 드라이버, 그래픽 카드 드라이버 및 마우스 드라이버와 동일합니다. VMware Tools를 설치하면 가상 머신의 성능이 크게 향상되고 가상 머신 해상도를 원하는 크기로 설정할 수 있습니다. . 또한 마우스가 가상 머신 창에서 호스트로 직접 전환됩니다.

1. VM 메뉴에서 VMware Tools 설치를 선택합니다.

2. 프롬프트에 따라 설치하고 마지막으로 가상 머신을 다시 시작합니다.

[이 문단 편집] 6. Java Virtual Machine

1. Java Virtual Machine이란 무엇입니까?

JVM(Java Virtual Machine)은 Java Virtual의 약자입니다. 머신(Machine)은 컴퓨터의 다양한 기능을 실제 컴퓨터에 시뮬레이션하여 구현한 가상의 컴퓨터이다. Java 가상 머신은 프로세서, 스택, 레지스터 등과 같은 자체적인 완전한 하드웨어 아키텍처를 갖고 있으며 이에 상응하는 명령어 시스템도 가지고 있습니다.

2. 자바 가상 머신을 사용하는 이유

자바 언어의 가장 중요한 특징은 플랫폼으로부터의 독립성입니다. 이 기능을 달성하려면 Java 가상 머신을 사용하는 것이 핵심입니다.

일반적인 고급 언어를 다른 플랫폼에서 실행하려면 최소한 다른 대상 코드로 컴파일해야 합니다. Java 언어 가상 머신이 도입된 이후에는 다른 플랫폼에서 실행될 때 Java 언어를 다시 컴파일할 필요가 없습니다. Java 언어 사용 모델 Java 가상 머신은 특정 플랫폼과 관련된 정보를 보호하므로 Java 언어 컴파일러는 Java 가상 머신에서 실행되는 대상 코드(바이트코드)만 생성하면 되며 수정 없이 여러 플랫폼에서 실행할 수 있습니다. JVM(Java Virtual Machine)은 바이트코드를 실행할 때 바이트코드를 특정 플랫폼에서 실행하기 위한 기계 명령어로 해석합니다.

3. Java Virtual Machine을 이해해야 하는 사람

Java Virtual Machine은 Java 언어의 기본 구현을 위한 기초입니다. 자바 가상 머신에 대한 이해. 이는 Java 언어의 일부 속성을 이해하는 데 도움이 되며 Java 언어를 사용하는 데도 도움이 됩니다. 특정 플랫폼에서 Java 가상 머신을 구현하려는 소프트웨어 담당자, Java 언어의 컴파일러 작성자, 하드웨어 칩을 사용하여 Java 가상 머신을 구현하려는 사람들은 Java 가상 머신의 사양에 대한 깊은 이해가 있어야 합니다. 가상 머신. 또한, 자바 언어를 확장하거나 다른 언어를 자바 언어 바이트코드로 컴파일하려면 자바 가상 머신에 대한 깊은 이해도 필요하다.

4. 자바 가상 머신이 지원하는 데이터 타입

자바 언어로 자바 가상 머신이 지원하는 기본 데이터 타입은 다음과 같다.

바이트 : //1바이트에는 부호 있는 정수의 보수

short: //2바이트 부호 있는 정수의 보수

int: //4바이트의 보수 부호 있는 정수

long: //8바이트 부호 있는 정수의 보수

float: //4바이트 IEEE754 단정밀도 부동 소수점 수

double : //8바이트 IEEE754 배정밀도 부동 소수점 숫자

char: // 2바이트 부호 없는 유니코드 문자

거의 모든 Java 유형 검사는 컴파일 타임에 수행됩니다. 위에 나열된 기본 데이터 유형의 데이터는 Java로 실행될 때 하드웨어 태그를 지정할 필요가 없습니다. 이러한 원시 데이터형 데이터 자체를 연산하는 바이트코드(명령어)는 피연산자의 데이터형을 가리킨다. 예를 들어 iadd, ladd, fadd, dadd 명령어는 모두 두 개의 숫자를 더하고 그 피연산자 유형은 int, long, 플로트 및 더블. 가상 머신은 불리언(Boolean) 타입에 대해 별도의 명령을 설정하지 않습니다. 부울 유형 데이터는 정수 반환을 포함하여 정수 명령어로 처리됩니다. 부울 배열은 바이트 배열을 사용하여 처리됩니다. 가상 머신은 IEEE754 형식의 부동 소수점 숫자를 사용합니다. IEEE 형식을 지원하지 않는 구형 컴퓨터에서는 Java 수치 계산 프로그램을 실행할 때 속도가 매우 느려질 수 있습니다.

가상 머신이 지원하는 기타 데이터 유형은 다음과 같습니다:

object//Javaobject(객체)에 대한 4바이트 참조

returnAddress//4바이트 , jsr/ret/jsr-w/ret-w 명령에 사용됨

참고: Java 배열은 객체로 처리됩니다.

가상 머신의 사양에는 개체의 내부 구조에 대한 특별한 요구 사항이 없습니다. Sun 구현에서 객체에 대한 참조는 포인터 쌍을 포함하는 핸들입니다. 한 포인터는 객체의 메소드 테이블을 가리키고 다른 포인터는 객체의 데이터를 가리킵니다. JVM(Java Virtual Machine) 바이트코드로 표현된 프로그램은 유형 규칙을 준수해야 합니다. JVM(Java Virtual Machine) 구현은 유형 사양을 위반하는 바이트코드 프로그램 실행을 거부해야 합니다. JVM(Java Virtual Machine)은 바이트코드 정의의 제한으로 인해 32비트 주소 공간이 있는 시스템에서만 실행될 수 있는 것으로 보입니다. 그러나 바이트코드를 64비트 형식으로 자동 변환하는 Java 가상 머신을 생성하는 것은 가능합니다.

Java 가상 머신이 지원하는 데이터 유형을 보면 Java는 데이터 유형의 내부 형식에 대해 엄격한 규정을 두고 있으므로 다양한 Java 가상 머신 구현이 데이터를 동일한 방식으로 해석하여 Java의 플랫폼 독립성과 이식성을 보장한다는 것을 알 수 있습니다. /p>

.

5. Java 가상 머신 아키텍처

Java 가상 머신은 명령어 세트, 레지스터 세트, 스택 및 가비지 수집 힙의 다섯 부분으로 구성됩니다. 수집된 힙), 메소드 영역입니다. 이 5개 부분은 자바 가상 머신의 논리적 구성 요소로 어떤 구현 기술이나 구성 방법에 의존하지 않지만, 이들의 기능은 실제 머신에서 어떤 방식으로든 구현되어야 합니다.

1. Java 명령어 세트

Java 가상 머신은 약 248바이트 코드를 지원합니다. 각 바이트코드는 레지스터에 정수 추가, 서브루틴 전송 등과 같은 기본 CPU 작업을 수행합니다. Java 명령어 세트는 Java 프로그램의 어셈블리 언어와 동일합니다.

Java 명령 세트의 명령에는 수행할 작업을 지정하는 단일 바이트 연산자와 작업에 필요한 매개변수 또는 데이터를 제공하는 0개 이상의 피연산자가 포함되어 있습니다. 많은 명령어에는 피연산자가 없고 단일 바이트 연산자로만 구성됩니다.

가상 머신의 내부 루프 실행 과정은 다음과 같습니다.

do{

연산자 바이트를 가져옵니다. 연산에 따라 기호의 값에 따라 동작을 실행합니다.

}동안(프로그램이 끝나지 않았습니다)

명령 시스템의 단순성으로 인해 가상 머신은 실행 프로세스가 매우 간단하므로 실행 효율성이 향상됩니다. 명령어의 피연산자의 수와 크기는 연산자에 의해 결정됩니다. 피연산자가 1바이트보다 크면 빅바이트 우선 순서로 저장됩니다. 예를 들어, 16비트 매개변수는 저장 시 2바이트를 차지하고 해당 값은 다음과 같습니다.

첫 번째 바이트 *256 두 번째 바이트 바이트코드 명령어 스트림은 일반적으로 바이트만 정렬됩니다. 내부적으로 필수 4바이트 경계 정렬이 필요한 tabltch 및 조회 명령은 예외입니다.

2. 레지스터

Java 가상 머신의 레지스터는 마이크로프로세서의 일부 특수 레지스터와 유사하게 머신의 실행 상태를 저장하는 데 사용됩니다.

Java 가상 머신에는 네 가지 유형의 레지스터가 있습니다.

pc: Java 프로그램 카운터.

optop: 피연산자 스택의 상단에 대한 포인터입니다.

프레임: 현재 실행 메서드의 실행 환경에 대한 포인터입니다.

vars: 현재 실행되는 메소드의 지역변수 영역에 있는 첫 번째 변수를 가리키는 포인터.

Java 가상 머신

Java 가상 머신은 매개변수를 전달하거나 수신하기 위해 레지스터를 정의하거나 사용하지 않습니다. 그 목적은 명령어 세트의 단순성을 보장하는 것입니다. 그리고 구현 시간(특히 레지스터 수가 적은 프로세서의 경우).

모든 레지스터는 32비트입니다.

3. 스택

자바 가상 머신의 스택은 로컬 변수 영역, 실행 환경 영역, 피연산자 영역의 세 가지 영역으로 구성됩니다.

(1) 지역 변수 영역

각 Java 메소드는 고정된 크기의 지역 변수 세트를 사용합니다. vars 레지스터의 워드 오프셋에서 주소가 지정됩니다. 지역 변수는 모두 32비트입니다. 긴 정수와 배정밀도 부동 소수점 숫자는 두 지역 변수의 공간을 차지하지만 첫 번째 지역 변수의 인덱스에 따라 주소가 지정됩니다. (예를 들어 인덱스 n을 갖는 지역변수가 배정밀도 부동소수점 숫자라면 실제로는 인덱스 n과 n 1로 표현되는 저장공간을 차지한다.) 가상머신 사양에서는 64비트 값을 요구하지 않는다. 지역 변수는 64비트로 정렬됩니다.

가상 머신은 로컬 변수의 값을 피연산자 스택에 로드하는 명령을 제공하고, 피연산자 스택의 값을 로컬 변수에 쓰는 명령도 제공합니다.

(2) 실행 환경 영역

실행 환경에 포함된 정보는 동적 연결, 일반 메소드 반환 및 예외 전파에 사용됩니다.

·동적 연결

실행 환경에는 메서드 코드의 동적 연결을 지원하기 위해 현재 클래스와 현재 메서드의 인터프리터 기호 테이블에 대한 포인터가 포함되어 있습니다. 메서드의 클래스 파일 코드는 호출할 메서드와 액세스할 변수를 참조할 때 기호를 사용합니다. 동적 연결은 기호 메서드 호출을 실제 메서드 호출로 변환하고, 아직 정의되지 않은 기호를 해석하는 데 필요한 클래스를 로드하며, 변수 액세스를 해당 변수의 런타임 저장 구조에 해당하는 오프셋 주소로 변환합니다. 메소드와 변수를 동적으로 연결하면 메소드에 사용된 다른 클래스의 변경사항이 이 프로그램의 코드에 영향을 주지 않습니다.

·일반 메서드 반환

현재 메서드가 정상적으로 종료되면 호출하는 메서드는 올바른 유형의 반환 명령이 실행될 때 반환 값을 가져옵니다. 실행 환경은 정상적인 반환 시 호출자의 레지스터를 복원하고 호출자의 프로그램 카운터를 적절한 값만큼 증가시켜 실행된 메소드 호출 명령을 건너뛴 후 호출자의 실행 환경에서 실행을 계속하는 데 사용됩니다.

·예외 및 오류 전파

Java에서는 예외를 Error 또는 Exception이라고 합니다. 프로그램에서 발생하는 이유는 다음과 같습니다. 필요한 클래스 파일을 찾을 수 없습니다. ② 널 포인터 참조 등의 런타임 오류

·프로그램이 throw 문을 사용합니다.

예외가 발생하면 Java 가상 머신은 다음 조치를 취합니다.

· 현재 메소드와 연관된 catch 절 테이블을 확인하십시오. 각 catch 절에는 유효한 명령어 범위, 처리할 수 있는 예외 유형, 예외를 처리하는 코드 블록의 주소가 포함됩니다.

·예외와 일치하는 catch 절은 다음 조건을 충족해야 합니다. 예외를 발생시킨 명령이 해당 명령 범위 내에 있고 발생한 예외 유형이 처리할 수 있는 예외 유형의 하위 유형입니다. . 일치하는 catch 절이 발견되면 시스템은 지정된 예외 처리 블록으로 실행을 전송합니다. 예외 처리 블록이 없으면 현재 메서드의 모든 중첩된 catch 절이 검사될 때까지 일치하는 catch 절을 찾는 프로세스가 반복됩니다.

가상 머신은 일치하는 첫 번째 catch 절부터 실행을 계속하므로 catch 절 테이블의 순서가 중요합니다. Java 코드는 구조화되어 있으므로 특정 메소드의 모든 예외 핸들러는 항상 순서대로 테이블에 배열될 수 있습니다. 가능한 모든 프로그램 카운터 값에 대해 해당 프로그램에서 발생하는 예외를 처리하기 위해 선형 순서로 해당 예외 핸들러를 찾을 수 있습니다. 카운터 값.

· 일치하는 catch 절이 없으면 현재 메서드는 "잡히지 않은 예외" 결과를 가져오고 마치 호출자에서 예외가 발생한 것처럼 현재 메서드의 호출자에게 이를 반환합니다. 해당 예외 처리 블록이 여전히 호출자에서 발견되지 않으면 이 오류 전파가 계속됩니다. 오류가 최상위 수준으로 전파되면 시스템은 기본 예외 처리 블록을 호출합니다.

(3) 피연산자 스택 영역 머신 명령어는 피연산자 스택에서 피연산자를 가져와 연산하고 결과를 스택에 반환하기만 합니다. 스택 구조를 선택하는 이유는 소수의 레지스터나 비일반 레지스터(예: Intel486)만 있는 머신에서 가상 머신의 동작을 효율적으로 시뮬레이션할 수 있기 때문입니다. 피연산자 스택은 32비트입니다. 메소드에 매개변수를 전달하고 메소드로부터 결과를 수신하는 데 사용됩니다. 또한 작업 매개변수를 지원하고 작업 결과를 저장하는 데에도 사용됩니다. 예를 들어, iadd 명령어는 두 개의 정수를 추가합니다. 추가된 두 개의 정수는 피연산자 스택의 맨 위에 있는 두 단어여야 합니다. 이 두 단어는 이전 명령어에 의해 스택에 푸시되었습니다.

두 정수가 스택에서 팝되어 추가되고 결과가 피연산자 스택으로 다시 푸시됩니다.

각 기본 데이터 유형에는 필요한 작업을 수행하기 위한 특수 지침이 있습니다. 두 개의 위치가 필요한 long 및 double을 제외하고 각 피연산자에는 스택에 하나의 저장 위치가 필요합니다. 피연산자는 해당 유형에 해당하는 연산자에 의해서만 연산될 수 있습니다. 예를 들어, int 유형의 두 숫자를 푸시하고 이를 long 유형의 하나의 숫자로 처리하는 것은 불법입니다. Sun의 가상 머신 구현에서 이 제한은 바이트코드 검증기에 의해 시행됩니다. 그러나 유형에 관계없이 런타임 데이터 영역에서 작동하는 몇 가지 작업(연산자 복제 및 스왑)이 있습니다.

4. 쓸모없는 유닛 컬렉션 힙

자바의 힙은 클래스의 인스턴스(객체)가 공간을 할당하는 런타임 데이터 영역입니다. Java 언어에는 가비지 수집 기능이 있습니다. 즉, 프로그래머에게 객체를 명시적으로 해제할 수 있는 기능을 제공하지 않습니다. Java는 사용되는 특정 가비지 수집 알고리즘을 규정하지 않으며 시스템의 필요에 따라 다양한 알고리즘을 사용할 수 있습니다.

5. 메소드 영역

메소드 영역은 전통적인 언어의 컴파일된 코드나 유닉스 프로세스의 텍스트 섹션과 유사합니다. 메소드 코드(컴파일된 자바 코드)와 심볼 테이블을 저장합니다. 현재 Java 구현에서는 메소드 코드가 가비지 수집 힙에 포함되지 않지만 이는 향후 버전에서 계획되어 있습니다. 각 클래스 파일에는 Java 클래스 또는 Java 인터페이스의 컴파일된 코드가 포함되어 있습니다. 클래스 파일은 자바 언어의 실행 코드 파일이라고 할 수 있다. 클래스 파일의 플랫폼 독립성을 보장하기 위해 클래스 파일의 형식도 Java 가상 머신 사양에 자세히 설명되어 있습니다. 구체적인 내용은 Sun의 Java Virtual Machine 사양을 참조하세요.

上篇: 군대 순위 목록 下篇: 국내항공전 네자 VS 초선 속성 스킬 비교
관련 내용