Java Virtual Machine을 생성할 수 없습니다. 수행할 작업

짧은 자바-술어

가상 기기 (가상 기기)은 하드웨어나 소프트웨어 등 다양한 방식으로 구현될 수 있는 추상적인 컴퓨팅 장치입니다. 가상 머신 명령어 세트에 대한 컴파일은 마이크로프로세서 명령어 세트에 대한 컴파일과 거의 동일한 방식으로 발생합니다.

자바-플랫폼 (자바 플랫폼) - 가상 기기 자바그리고 표준 수업은 자바-플랫폼. 자바-플랫폼은 프로그램이 실행되는 운영 체제에 관계없이 통합된 인터페이스를 프로그램에 제공합니다.

Java 원격 메소드 호출 (JRMI) – 원격 메소드를 호출하기 위한 인터페이스입니다. 다른 가상 머신에서 실행되는 원격 메소드를 호출하는 방법을 정의하는 분산 객체 모델 자바.

자바 런타임 환경 (JRE) – 실행 환경 자바. 하위 집합 자바 개발 키트, 최종 사용자를 위한 것입니다. JRE가상 머신으로 구성 자바 (JVM), 표준 수업 자바그리고 지원 파일.

자바 가상 머신 (JVM) - 가상 기기 자바, 런타임의 일부 자바, 해석 수행 자바바이트코드. 자바 가상 머신바이트코드 명령어 세트, 레지스터 세트, 스택, 가비지 컬렉터 및 메소드 저장 공간에 의해 지정됩니다.

자바바이트코드 (자바 바이트코드)는 다음을 생성하는 기계 독립적인 코드입니다. 자바-컴파일러. 실행된 바이트코드 자바-통역사. 가상 기기 자바완전 스택: 메모리 셀의 복잡한 주소 지정 및 많은 수의 레지스터가 필요하지 않습니다. 그러므로 팀들은 JVM짧게, 대부분 길이가 1바이트이므로 명령은 JVM~라고 불리는 바이트코드 (바이트코드), 길이가 2바이트와 3바이트인 명령도 있지만(평균 명령 길이는 1.8바이트입니다).

언어로 작성된 프로그램 자바, 컴파일러에 의해 바이트코드로 변환됩니다. 바이트코드는 하나 이상의 파일로 작성되며 외부 메모리에 저장되거나 네트워크를 통해 전송될 수 있습니다. 이는 바이트코드 파일의 크기가 작기 때문에 특히 편리합니다. 컴파일 결과로 얻은 바이트코드는 다음을 구현하는 시스템이 있는 모든 컴퓨터에서 실행될 수 있습니다. JVM(특정 프로세서 및 PC 아키텍처 유형에 관계없이) 이것이 원칙을 구현하는 방법입니다. 자바: "한 번 작성하면 어디에서나 실행 가능""한 번 작성하면 어디서나 실행 가능".

자바-애플릿 (자바 애플릿) – 자바- 웹 브라우저에서 접근할 수 있는 애플리케이션.

기술이란 무엇인가 자바

기술 자바회사에서 프로그래밍 도구로 만들어졌습니다. 썬 마이크로시스템즈 1991년에 코드명 "Green"("프로젝트")이라는 소규모 비공개 연구 프로젝트의 일환으로 시작되었습니다.

James Gosling이 이끄는 13명의 엔지니어와 개발자로 구성된 "그린 팀"( 제임스 고슬링) 1년 반 동안 별도의 사무실에서 밤낮으로 일했습니다. 샌드 힐 로드멘로 파크(캘리포니아, 다시 !) 회사에 귀하의 업무에 대해 알리지 않고 .

Green Team 엔지니어들은 프로그래밍 분야에서 다가오는 "새로운 물결"을 예측하고 준비하려고 노력했습니다. 그들은 처음에 주요 개발 추세 중 하나가 디지털 소비자 기술과 컴퓨터 간의 융합이라고 가정했습니다.

이 작업의 결과는 코드명 "Oak"( 오크).

새로운 프로그래밍 언어가 미래의 디지털 기술에 어떻게 사용될 수 있는지 보여주기 위해 Green Team은 디지털 케이블 TV용 가정용 휴대용 대화형 컨트롤러를 만들었습니다. 그러나 당시에는 그 아이디어가 너무 혁신적이었고 디지털 케이블 TV는 기술이 제공하는 극적인 혁신을 받아들일 준비가 되어 있지 않았습니다. 자바.

그러나 기술의 혁신은 자바인터넷에 대한 수요가 많은 것으로 밝혀졌으며 기술의 첫 번째 공식 발표에서 자바 1995년에 Gosling 팀은 이 기술이 자바인터넷 브라우저에서 사용됩니다 넷스케이프 네비게이터.

이제는 플랫폼 자바 4백만 명 이상의 소프트웨어 개발자가 사용하고 있습니다. 이는 전 세계 모든 주요 산업에서 사용되며 모든 프로그래밍 기술 전반에 걸쳐 다양한 장치, 컴퓨터 및 네트워크에서 사용됩니다.

전반적으로 이 기술의 다양성, 효율성, 보안 및 다양한 플랫폼과의 호환성으로 인해 자바네트워킹 기술을 위한 이상적인 도구입니다. 따라서 오늘날 이 기능은 다음을 포함하여 25억 개 이상의 장치에 사용됩니다.

10억 개 이상의 휴대폰 및 기타 휴대용 장치;

12억 5천만 개의 스마트 카드;

그 밖에도 셋톱박스, 프린터, 웹캠, 게임, 자동차 내비게이션 시스템, 게임기, 의료 장비, 주차 미터기 등

현재 기술 자바인터넷과 슈퍼컴퓨터부터 노트북과 휴대폰, 주식 거래 시뮬레이션 장치부터 가정용 게임 콘솔과 신용 카드까지 거의 모든 네트워크와 장치에서 찾을 수 있습니다.

소프트웨어 개발자가 기술을 선택하는 이유 자바

프로그래밍 언어 자바 4백만 명 이상의 소프트웨어 개발자가 실제로 포괄적으로 개선, 확장, 테스트 및 검증했습니다.

완전하고 매우 안정적이며 다재다능한 기술 자바다음을 수행할 수 있기 때문에 소프트웨어 개발자에게 매우 중요합니다.

한 플랫폼에서 소프트웨어를 작성하고 거의 모든 다른 플랫폼에서 실행합니다.

웹 브라우저 및 웹 서비스에서 실행할 프로그램을 만듭니다.

온라인 포럼, 상점, 설문조사, 처리를 위한 서버 애플리케이션 개발 HTML-양식 등;

다양한 기능을 결합하여 사용자 요구 사항에 최대한 맞춰진 애플리케이션과 서비스를 만듭니다. 자바-모듈;

휴대폰, 원격 프로세서, 저가형 소비자 제품 및 거의 모든 디지털 장치를 위한 강력하고 효율적인 애플리케이션을 작성하세요.

기술이란 무엇인가 모바일 자바 (J2ME - 자바 2 마이크로 에디션)

부분 J2ME다양한 모바일 장치 사용자에게 최적화된 버전이 포함되어 있습니다. JRE. 컴팩트 버전 플랫폼의 주요 구성 요소 자바 2 (J2ME)는 표준 구성( 질병통제예방센터), 구성이 제한된 장치를 위한 가상 머신( CDLC) 및 정보 기능을 갖춘 모바일 장치 프로필. 또한 플랫폼에는 프로그램 생성을 단순화하는 다른 많은 도구와 기술이 포함되어 있습니다. 자바가정용 및 임베디드 장치(휴대폰, PDA, 스마트 카드, 호출기, 셋톱박스 및 기타 모바일 및 무선 장치)용.

기술 J2ME은(는) 소프트웨어 제품군의 일부입니다. 자바. 관련 기술로는 표준( J2SE) 및 기업( J2EE) 플랫폼 버전 자바 2. 무엇보다도 기술 자바웹 서비스 개발, 언어로 데이터 구성 및 전달을 돕습니다. XML, 다양한 네트워크 프로토콜을 통해 연결 설정, 도구 패키지 작업 및 애플리케이션 기능 구현 자바 웹 스타트.

표준 런타임 버전 사용 썬 자바 (JRE) 버전 J2ME플랫폼에 대한 표준 규칙 준수는 유사합니다. 자바주요 모바일 장치 제조업체 및 무선 서비스 제공업체의 개발 기여.

무슨 일이야? KVM

KVM (킬로 가상 머신)는 플랫폼의 컴팩트 버전의 일부인 실행 환경의 요소입니다. 자바 2 (J2ME) 메모리 용량과 프로세서 성능이 제한된 장치에 사용하도록 고안되었습니다. 휴대폰, 호출기, PDA의 표준 컴퓨팅 기능( PDA)는 종종 도움을 받아 정확하게 구현됩니다. KVM.

좋다 JVM(가상 기기 자바), KVM기술을 기반으로 애플리케이션과 애플릿을 실행합니다. 자바. KVM휴대폰 및 기타 모바일 장치에 사용되는 반면 JVM컴퓨터에 설치됩니다. 플랫폼의 표준 버전에 포함됨 자바 2 (J2SE) 포함됨 JRE, 자바 플러그인그리고 JVM.

게다가 KVM, 플랫폼 J2ME다양한 크기의 많은 가상 머신이 포함되어 있습니다. KVM– 이는 제한된 구성을 가진 장치에 대한 가상 머신을 구현하기 위한 옵션 중 하나입니다( 연결된 제한된 장치 구성, CDLC), 기술을 기반으로 한 소프트웨어 제품의 실행을 위해 설계되었습니다. 자바모바일 장치에서.

관련 기술 J2ME정보 기능을 갖춘 모바일 장치 프로필입니다( 모바일 정보 장치 프로필, MIDP)는 모바일 장치용 애플리케이션, 특히 휴대폰 및 양방향 호출기용 애플리케이션을 개발할 때 가장 자주 사용됩니다.

소프트웨어를 구하는 방법 자바모바일 기기용/ PDA?

기능 자바모바일 장치용으로 제작된 은 제조업체에서 이러한 장치에 설치합니다. 장치에 소프트웨어가 설치되어 있는지 제조업체에 문의하세요. 자바.

가상 기기 KVM가상 머신과 유사합니다. 자바 (JVM), 모바일 장치용으로 설계되었습니다. 해당 언어로 작성된 애플릿과 애플리케이션의 실행을 제공합니다. 자바, 모바일 장치에서. 가상 기기 KVM제조업체에서 설치해야 합니다. 직접 다운로드하여 설치할 수 없습니다.

무슨 일이야? 자바 가상 머신

자바 가상 머신(약어 자바 VM, JVM) - 가상 기기 자바- 실행 시스템의 주요 부분 자바, 소위 자바 런타임 환경 (JRE). 가상 기기 자바바이트코드를 해석하고 실행합니다. 자바, 소스 텍스트에서 사전 생성됨 자바- 컴파일러 프로그램 자바.

1996년에 회사는 Blue Book 문서의 첫 번째 버전을 출시했습니다. JVM"는 가상 머신의 사양을 설명합니다. 자바, 이는 사실상 업계 표준 플랫폼이 되었습니다. 자바. 이 문서 덕분에 대체 구현이 나타났습니다. JVM, 이는 "깨끗한 개발"입니다(eng. 클린룸 디자인). 예는 다음과 같습니다 카페.

버전 이후 J2SE 5.0사양 변경 JVM이해관계자의 공식화된 희망에 따라 개발되었습니다. 사양 변경 프로세스 JVM~라고 불리는 Java 커뮤니티 프로세스.

직면 그리고 마이크로소프트

플랫폼 개발 초기에는 자바두 가지 경쟁 구현이 있었습니다. 자바 VM- 회사에서 한 명 썬 마이크로시스템즈, 언어의 창시자 자바, 다양한 플랫폼용( 윈도우, 맥 OS, 유닉스), 다른 하나는 회사에서 마이크로소프트플랫폼 전용 윈도우그리고에 따르면 마이크로소프트, “빠른 실행을 위해 특별히 최적화되었습니다. 자바-플랫폼의 코드 마이크로소프트 윈도우».

하지만, 마이크로소프트 JVM설명된 사양과 완전히 호환되지 않았습니다. V JVM 도서, 또한 과부하(동시에 실행되는 스레드가 많은 경우)에서 작업할 때 보안 및 성능과 관련된 심각한 문제가 있었습니다. 회사 이 상황은 용납될 수 없다고 생각하고 다음과 같이 결정했습니다. 마이크로소프트플랫폼에 대한 고의적인 불신과 욕설에 관여한 경우 자바가상 머신 버전을 배포하여 자바, 위와 같은 단점이 있습니다.

이를 바탕으로 반복적으로 고소당함 마이크로소프트, 그리고 지속적으로 첫 번째 달성 마이크로소프트내 구현의 이름을 지정할 권리를 잃었습니다. JVM자바 VM. 지금부터 마이크로소프트내 제품을 간단하게 부르기 시작했습니다. 마이크로소프트 VM. 그 다음에 마이크로소프트내 것을 삽입할 권리를 잃었습니다 V.M.브라우저와 운영 체제에 적용됩니다. 이후 마이크로소프트강제로 철수하게 됐어요 V.M.배달에서 윈도우그리고 패키지부터 즉., 그러나 법원 결정에 따라 웹사이트에서 별도로 다운로드할 수 있도록 제공할 수도 있습니다. 그 다음에 새 버전 개발 중단 달성 마이크로소프트 VM업데이트 릴리스를 중지한 다음 제외합니다. 마이크로소프트 VM웹사이트에서 다운로드할 수 있는 프로그램 목록에서 마이크로소프트.

일부 그것-전문가들은 어려운 입장을 취했다고 믿는다 문제에 자바, 회사의 발전에 추가적인 인센티브가 될 수 있습니다. 마이크로소프트자체 크로스 플랫폼 솔루션 – .넷 프레임 워크.

표준 준수를 위한 투쟁

이에 대해 '아버지'는 이렇게 말한다. 자바 James Gosling: “표준 준수에 대해 이야기한다면 마이크로소프트회사가 가상 머신의 상호 운용성을 제한하려고 시도하여 이전 계약을 위반했다는 것입니다. 이 시스템에 최적화된 코드는 다른 플랫폼에서 실행되지 않았습니다. 사용자를 시스템에 연결하려는 시도가 있습니다. 그러한 시도는 항상 억압되어 왔으며 앞으로도 억압될 것입니다. 그러나 상호운용성의 원칙이 존중된다면 장애물은 없습니다. 예를 들어, IBM최소 6개 이상의 가상 머신 자바, 그들은 이 분야에서 그들만의 발전을 이루었습니다 HP그리고 다른 많은 회사들."

직면 그리고 IBM

2001년에는 크로스 플랫폼 표준을 개발하기 위해 데스크탑-응용 프로그램, IBM열린 프로젝트가 시작되었습니다 . 뼈대 폐쇄적 개발을 기반으로 IBM 비주얼에이지. IBM라이센스에서 자유 커뮤니티의 이익과 비즈니스의 이익(우리의 이익)의 균형을 유지했습니다. Eclipse 공개 라이센스, 인식됨 FSF.

이 프로젝트는 성공적으로 발전하고 있으며 업계에서 인정을 받고 있으며 IBM독립으로 이클립스 재단.

계속 반대 입장 이클립스 재단, 좋다 마이크로소프트. 공식적으로 논란의 주요 원인은 도서관입니다. SWT, 이는 모순된다 - 가상 머신의 개념과 Java 애플리케이션의 이식성.

어떤 버전인지 확인하는 방법 자바귀하의 PC에 설치

페이지 열기 java.com/ru/download/installed.jsp;

– 버튼을 누르세요 자바 버전 확인.

다운로드 방법 및 설치하다 자바 가상 머신

– 페이지를 엽니다 java.com/en;

– 버튼을 누르세요 무료로 자바 다운로드;

- 창문에서 안전 경고딸깍 하는 소리 예 –> 계속 –> 수락 고급 옵션 패널 표시) –> 다음 –> 다음 –>메시지 창에서 딸깍 하는 소리 마치다.

다운로드 방법 자바수동으로

다운로드 자바수동으로 페이지를 엽니다 java.com/ru/download/manual.jsp;

– 목록에서 운영 체제에 따라 파일을 선택하고 다운로드한 후 설치 파일을 실행합니다.

- 창문에서 자바 설정딸깍 하는 소리 계속 –> 수락(설치 폴더 경로를 변경하거나 기타 설정을 변경하려면 고급 옵션 패널 표시) –> 다음 –> 다음 –>메시지 창에서 감사합니다! Java를 성공적으로 설치했습니다.딸깍 하는 소리 마치다.

노트

1. 설치가 완료된 후 자바브라우저를 다시 시작해야 할 수도 있습니다.

2. 소프트웨어가 올바르게 설치되었는지 확인하십시오. 자바링크를 따라가시면 됩니다 즉시 확인.

3. 브라우저 지원이 활성화되어야 합니다. 자바스크립트그리고 쿠키.

4. 표준 다운로드 크기는 7.1입니다. MB(다운로드되는 파일의 최소량입니다.) 추가 기능을 선택하면 크기가 커질 수 있습니다.

5. 제외 윈도우, 다운로드할 수 있습니다 자바을 위한 솔라리스, 리눅스.

을 위한 사과 (OS X) 다운로드 자바회사 웹사이트에서 사과.

6. 지원되는 프로세서 인텔그리고 다른 제조업체의 호환 프로세서. 권장 프로세서 펜티엄클럭 주파수 166 MHz최소 64 용량의 물리적 RAM과 결합하여 그 이상 MB. 또한 최소 98이 필요합니다. MB여유 디스크 공간.

7. 가상머신 설치 후 자바~에서 썬 마이크로시스템즈 V 섹션이 생성됩니다

.

가상 머신을 설치한 후 V Windows 레지스트리파티션이 생성됩니다

어디서 다운로드할 수 있나요? 마이크로소프트 자바 가상 머신

안에 윈도우 OS일부 프로그램은 설치 중에 시스템에 가상 머신을 설치해야 합니다. 자바~에서 마이크로소프트.

마이크로소프트 VM(2003년 3월 7일자 버전 5.00.3810; 5.07 MB) 에서 다운로드할 수 있습니다.

삭제 방법 마이크로소프트 자바 가상 머신

지우는 것 msjava:

– 클릭 시작 -> 실행;

- 열리는 창에서 프로그램 시작텍스트 필드로 열려 있는입력하다 RunDll32 advpack.dll,LaunchINFSection Java.inf,제거 –> 알았어;

– 폴더 삭제 \WINDOWS\java;

– 파일을 삭제 \WINDOWS\inf\java.pnf;

– 파일을 삭제 \WINDOWS\system32\jview.exe;

– 파일을 삭제 \WINDOWS\system32\wjview.exe;

– 클릭 시작 -> 실행;

- 열리는 창에서 프로그램 시작텍스트 필드로 열려 있는입력하다 등록 –> 알았어;

- 열리는 창에서 레지스트리 편집기파티션 삭제

;

- 닫다 레지스트리 편집기.

런타임을 활성화하는 방법 자바 (JRE) 웹 브라우저에서

JVM은 Java 플랫폼의 핵심 구성 요소입니다. Java Virtual Machine은 Java 컴파일러(javac)가 Java 프로그램의 소스 텍스트에서 미리 생성한 Java 바이트코드를 해석하고 실행합니다.

Java 가상 머신은 다양한 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있으므로 Java는 미들웨어이자 자체 플랫폼으로 간주될 수 있으므로 "한 번 작성하면 어디서나 실행" 원칙이 적용됩니다. 많은 플랫폼에서 단일 바이트코드를 사용하면 Java를 "한 번 컴파일하고 어디서나 실행"할 수 있습니다.

JVM에서 실행하려는 프로그램은 일반적으로 .class 파일로 표시되는 표준화된 이식 가능한 바이너리 형식으로 컴파일되어야 합니다. 프로그램은 서로 다른 파일에 있는 여러 클래스로 구성될 수 있습니다. 대규모 프로그램을 더 쉽게 호스팅할 수 있도록 일부 .class 파일을 소위 .jar 파일(Java Archive의 약어)로 함께 패키지할 수 있습니다.

JVM 가상 머신이 파일을 실행합니다. .수업또는 .항아리, Sun 마이크로시스템의 HotSpot과 같은 JIT(Just-In-Time) 컴파일러를 해석하거나 사용하여 JVM용으로 작성된 명령을 에뮬레이트합니다. 요즘 JIT 컴파일은 더 빠른 속도를 달성하기 위해 대부분의 JVM에서 사용됩니다. 또한 애플리케이션 개발자가 클래스 파일을 특정 플랫폼용 네이티브 코드로 미리 컴파일할 수 있는 사전 컴파일러도 있습니다.

JRE(Java Runtime Environment)의 인스턴스인 JVM은 Java 프로그램이 실행될 때 작동하게 됩니다. 실행이 완료된 후 이 인스턴스는 가비지 수집기에 의해 삭제됩니다. JIT는 애플리케이션 실행 속도를 높이는 데 사용되는 Java Virtual Machine의 일부입니다. JIT는 유사한 기능을 가진 바이트코드 부분을 동시에 컴파일하므로 컴파일에 필요한 시간이 줄어듭니다.

JVM은 스택 머신입니다. 이는 범용 레지스터가 없으며 스택에 있는 데이터에 대해 작업이 수행됨을 의미합니다. 이 목적은 각 프레임 내에 할당된 피연산자 스택에 의해 제공됩니다. 데이터를 수정하는 Java 바이트코드 명령이 실행되면 해당 명령의 피연산자가 피연산자 스택에서 팝되고 명령의 결과가 동일한 스택에 푸시됩니다.

메서드의 런타임에는 동적 바인딩, 메서드 반환 및 예외 처리에 필요한 정보가 포함되어 있습니다. 클래스 범위에 포함된 클래스 코드는 기호 링크를 사용하여 외부 메서드와 변수에 액세스합니다. 동적 연결은 기호 링크를 실제 링크로 변환합니다. 런타임 환경에는 외부 메소드 및 변수에 대한 호출이 이루어지는 메소드 기호 테이블에 대한 참조가 포함되어 있습니다.

런타임에는 호출 메서드의 프레임에 대한 포인터, 반환할 pc 레지스터 값, 호출 메서드 레지스터의 내용, 반환 값을 쓸 영역에 대한 포인터 등 메서드에서 반환하는 데 필요한 정보도 포함되어 있습니다.

예외 처리 정보에는 클래스 메서드의 예외 처리 섹션에 대한 참조가 포함되어 있습니다.

또한 런타임은 상수 및 클래스 변수를 포함하여 클래스 영역에 포함된 데이터를 참조합니다.

JVM 명령어는 1비트 opcode로 구성되며 피연산자를 포함할 수도 있습니다. 피연산자의 수와 크기는 opcode에 의해 결정됩니다. 일부 명령어에는 피연산자가 없습니다.

JVM의 설계는 C, C++ 등 언어에 대한 다년간의 프로그래밍 경험을 바탕으로 개발되었습니다. 이를 통해 우리는 프로그래머의 삶을 훨씬 쉽게 만들어주는 JVM 구조를 만들 수 있었습니다.

  • 애플리케이션 코드는 컨테이너에서 실행됩니다.
  • 보호된 프로그램 실행 환경이 있습니다.
  • 프로그래머의 메모리 관리 능력은 최소한으로 줄어들었고,
  • 실행 환경을 크로스 플랫폼으로 만들었고,
  • 자체 관리를 위한 런타임(프로그램 실행 중) 정보가 사용되기 시작했습니다.

이 마지막 측면을 통해 JVM은 프로그램의 특정 블록이 호출되는 빈도에 따라 프로그램을 실행할 때 더 나은 결정을 내릴 수 있습니다. 가상 머신 자체는 컴파일된 Java 프로그램의 바이트 코드를 해석하지만 JVM에서는 런타임에 자주 호출되는 프로그램 블록을 머신 코드로 컴파일하는 것이 가능합니다. 이 기술을 JIT(Jast-in-Time)라고 합니다. 이는 기계어 코드가 프로그램 파일에 저장된다는 의미는 아니며 RAM에서 실행되는 동안에만 존재합니다. 따라서 여러 주기의 작업 후에 Java 프로그램의 성능은 컴파일된 언어인 C 및 C++의 유사한 프로그램보다 높아질 수 있습니다.

바이트코드란 무엇입니까?
개발자가 JVM을 처음 접할 때 때때로 JVM을 컴퓨터 내의 컴퓨터로 생각합니다. 따라서 바이트코드를 내부 컴퓨터의 프로세서에 대한 기계어 코드 또는 가상의 프로세서에 대한 기계어 코드로 생각하기 쉽습니다.

실제로 바이트코드는 실제 프로세서에서 실행되는 기계어 코드와 그다지 유사하지 않습니다. 전문가들은 바이트코드를 중간 표현, 즉 소스 코드와 기계어 코드 간의 적응이라고 부릅니다.

바이트코드의 궁극적인 목표는 JVM에서 효율적으로 실행할 수 있는 데이터 및 제어 정보를 표현하기 위한 형식을 갖는 것입니다.

왜 바이트코드라고 불렸나요?
명령 코드(opcode opcode)는 1바이트에 불과하므로(일부 작업에는 바이트 스트림으로 작업 바이트 뒤에 오는 매개변수가 있음) 명령 변형이 256개만 있습니다. 실제로는 일부는 사용하지 않아 200여개 정도를 사용하고 있는데, 그 중 일부는 최신 버전의 javac에서 사용되지 않았습니다.

컴파일러는 javac인가요?
일반적으로 컴파일러는 기계어 코드를 생성하고, javac는 기계어 코드와 유사하지 않은 바이트코드를 생성합니다. 그러나 클래스 파일은 개체 파일(예: Windows *.dll 또는 Unix *.so)과 비슷하며 읽을 수 없습니다.

컴퓨터 과학 용어에서 javac는 기계 코드가 생성될 수 있는 프로그램 코드의 중간 표현을 생성하는 프런트 엔드 컴파일러와 가장 유사합니다.

따라서 순수한 형태의 javac는 컴파일러가 아니지만 대부분의 책과 기사에서 소스 코드 컴파일러 또는 javac 컴파일러와 같은 문구를 볼 수 있습니다. 그리고 실제 컴파일은 프로그램 실행을 최적화하기 위해 기계어 코드를 생성할 때 JIT에 의해 수행됩니다.

바이트코드가 최적화되어 있나요?
javac의 초기 버전은 고도로 최적화된 바이트코드를 생성했습니다. 이것은 잘못된 것으로 판명되었습니다. JIT 컴파일의 출현으로 기계어 코드를 빠르게 얻는 것이 더욱 중요해졌습니다. 따라서 JIT 컴파일이 용이한 바이트코드를 생성하는 것이 필요하다는 사실이 밝혀졌다. 따라서 이제 바이트코드의 최적성과 JIT 컴파일 속도 사이에 절충안이 있습니다. 그러면 바이트코드의 일부가 계속해서 해석됩니다.

바이트코드는 정말로 기계 독립적인가요? 바이트 순서는 어떻습니까?
바이트 코드 형식은 생성된 시스템에 관계없이 항상 동일하며 항상 빅 엔디안(가장 중요한 것부터 가장 중요한 것까지)입니다. 예를 들어, 메모리에서 4바이트를 차지하는 정수는 최상위부터 최하위까지 바이트 단위로 저장됩니다.

Java는 해석된 언어인가요?
본질적으로 JVM은 해석기입니다(성능 향상을 제공하는 JIT 컴파일 포함). Java 소스 코드 자체는 실행을 위해 인터프리터로 전송되지 않고 바이트코드로 컴파일되며 바이트코드는 JVM에 의해 해석됩니다.

JVM에서 다른 언어를 실행할 수 있나요?
바이트코드로 컴파일되는 모든 것은 JVM에서 실행될 수 있습니다. 이러한 언어의 예로는 Scala, Clojure, Kotlin 등이 있습니다.
또한 특정 언어에 대한 인터프리터를 Java로 구현하는 것도 가능합니다. 예를 들어 JRuby 언어의 경우 이것이 수행되는 방법입니다.

바이트 코드를 보려면 간단한 텍스트 편집기에서 .class 파일을 열면 됩니다. 분명히 읽을 수 없을 것입니다. 그러나 우리는 이를 바이트코드 니모닉, 즉 (읽을 수 있는) 기본 명령어와 데이터로 분해할 수 있습니다.

두 개의 숫자를 더하는 간단한 프로그램을 생각해 보세요.

Public class Main ( /** * 두 숫자를 더하는 메서드. * @param a 첫 번째 항 * @param b 두 번째 항 * @return 두 숫자를 더한 결과 */ private static int added(int a, int b ) ( return a + b; ) /** * 프로그램의 진입점. * @param args 사용되지 않은 명령줄 매개변수 */ public static void main(String args) ( // 첫 번째 항 int x = 43; // 두 번째 항 int y = 56; // 두 변수의 값을 더하고 // 결과를 변수에 넣습니다. int result = added(x, y) // 변수의 값을 표시합니다. result.out.printl(result) ) )

편의를 위해 Idea에서 빈 프로젝트를 만들고 이 클래스를 src 폴더에 배치할 수 있습니다.
실행하려면 실행하세요. Idea는 이를 위해 자연스럽게 javac를 사용하여 컴파일하고 Main.class 파일을 생성하고 실행을 위해 실행합니다. 모든 것이 잘 되었는지 확인해 봅시다. 숫자의 합이 콘솔에 나타날 것입니다.

그런 다음 터미널에서 프로젝트 폴더로 이동한 다음 클래스 파일을 생성할 폴더로 이동합니다. out/production 폴더에 있어야 합니다.

디스어셈블하려면 다음 명령을 실행하고 컴파일된 클래스를 매개변수로 전달합니다.

Javap -c -p Main.class

C - 분해,
-p - 클래스의 모든 구성원에 대한 정보를 표시합니다.

터미널에서 다음을 얻어야 합니다:

공용 클래스 org.dart.Main ( public org.dart.Main(); 코드: 0: aload_0 1: informspecial #1 // 메소드 java/lang/Object." ":()V 4: return private static int added(int, int); 코드: 0: iload_0 1: iload_1 2: iadd 3: ireturn public static void main(java.lang.String); 코드: 0: bipush 43 // 첫 번째 변수에 할당된 숫자 리터럴 2: istore_1 3: bipush 56 // 두 번째 변수에 할당된 숫자 리터럴 5: istore_2 6: iload_1 7: iload_2 8: informstatic #2 // 메소드 추가:(II)I 11: istore_3 12: getstatic #3 // 필드 java/lang/System.out:Ljava/io/PrintStream 15: iload_3 16: Invokevirtual #4 // 메소드 java/io/PrintStream.println:(I)V 19: return )

여기서는 우리가 직접 작성하지 않은 코드까지 포함하여 흥미로운 것들을 많이 볼 수 있습니다. 예를 들어 방법은 다음과 같습니다.

공개 org.dart.Main(); 코드: 0: aload_0 1: Invokespecial #1 // 메소드 java/lang/Object." ":()V 4: 반환

이것은 일반적인 메서드가 아니라 생성자입니다. 컴파일하는 동안 자동으로 추가되었습니다. 추가되는 이유는 별도의 이야기입니다.

메소드 내 코드 줄의 번호가 순서대로 매겨져 있는 것 같습니다. 이것은 전적으로 사실이 아닙니다. 일부 작업이 의존하는 매개변수의 길이를 고려합니다.

연산의 의미를 설명하기 위해 주석을 사용하여 두 개의 숫자를 더하는 방법을 고려해 보겠습니다.

개인 정적 int 추가(int, int); 코드: 0: iload_0 // 매개변수의 첫 번째 정수를 스택에 로드 1: iload_1 // 매개변수의 두 번째 정수를 스택에 로드 2: iadd // 스택에서 두 개의 숫자를 추가하고 결과를 스택에 푸시 3: ireturn // 메소드에서 정수를 반환합니다.

이 경우 모든 작업에는 정확히 1바이트가 소요됩니다.
작업 목록은 다음 링크에서 확인할 수 있습니다.
Java 바이트코드 명령어 목록

javac로 컴파일된 모든 프로그램은 이러한 작업과 해당 매개변수 집합으로 구성됩니다. 그러면 JVM은 프로그램이 시작될 때 명령을 해석하기 시작하고 JIT 기술을 사용하여 일부 프로그램 블록을 기계어 코드로 변환합니다.

실험적으로 다양한 데이터 유형을 사용하는 다양한 작업에 대해 어떤 코드를 얻는지 확인할 수 있습니다. 1바이트를 초과하는 숫자, 즉 255보다 큰 숫자의 데이터에 대해 몇 바이트가 제공되는지 확인할 수도 있습니다.

여기에는 이미 많은 훌륭하고 정확한 답변이 제시되어 있지만 이 비유는 다음과 같다는 점을 분명히 하고 싶습니다.

Java Virtual Machine은 본질적으로 인터프리터이기도 합니다.

당신을 매우 잘못된 길로 이끌 수 있습니다!

이름에 있는 단어는 상당히 정확한 의미를 가지며 JVM은 정확하게 호출됩니다. 자동차로, 컴파일러가 아닌 통역사가 아닌 것은 전혀 우연이 아닙니다. Java(javac)에는 컴파일러가 있으며 이는 프로그램을 실행하는 데 필요하지 않고 특히 이를 바이트코드로 컴파일하는 데 필요합니다. 그렇기 때문에 JRE(런타임 환경)에는 포함되지 않고 JDK(개발 환경)에는 포함되어 있습니다. JVM 자체에는 프로그램 실행 중에 바이트코드를 프로세서 명령으로 컴파일하는 JIT 컴파일러라는 또 다른 것이 있지만 이는 또 다른 이야기이며 인터프리터라고도 부를 수 없습니다.

본질적으로 JVM은 프로세서이며 가상 프로세서입니다. 그리고 모든 프로세서(하드웨어, x86 유형 또는 가상, .NET의 CLR 유형)와 마찬가지로 자체 작업 세트가 있습니다. 코드바이트라고 함 암호. x86이 C++, Pascal 또는 Go를 사용하여 컴파일러에서 생성된 코드를 실행할 수 있는 것처럼 JVM은 Java, Scala 또는 Kotlin에서 컴파일된(또는 직접 작성한) 바이트코드를 실행할 수 있으며 .class -file은 기본적으로 "JVM 프로세서"용으로 컴파일된 동일한 .exe(보다 정확하게는 .so)입니다. 이것이 바로 크로스 플랫폼의 핵심입니다. x86용으로 컴파일된 코드가 Intel 또는 AMD의 프로세서에서 실행되는 것처럼 JVM 바이트코드도 Oracle, IBM, OpenJDK 등의 JVM에서 실행됩니다. 그리고 JIT의 존재조차도 컴파일실행 중에 특정 하드웨어 프로세서의 opcode에 대한 바이트코드는 본질적으로만 정직한 스택(SUN) 또는 등록(Dalvik) VM을 인터프리터로 호출할 이유를 제공하지 않습니다. :)

사실 이 분류 자체(해석/컴파일된 LANGUAGE)는 지난 25년 정도 동안 사실상 의미가 없었습니다. 처음에는 APL 또는 BASIC과 같은 통역사 형태로 구현을 지향했던 언어(간단히 구문 분석된 어휘를 사용하여 통역사가 더 작고 제한된 메모리에 프로그램 자체를 위한 충분한 공간을 남길 수 있음)가 현재(예외 , 물론 매우 고도로 전문화된 응용 프로그램의 경우)은 오래된 교과서에 있는 것만 명예로운 자리를 차지하며, 이 분류는 더 잘 사용할 가치가 있는 끈기로 새 교과서에 단어 하나하나 계속 복사됩니다. 동시에 어떤 이유로 그들은이 두 개념이 더 이상 언어 자체에 관한 것이 아니라 구현의 일부 방법에 관한 것이며 그 이후로 이러한 방법 외에도 다른 많은 좋은 점을 명확히하는 것을 잊었습니다. 이 주제에 대한 다양한 개념(예: VM, JIT, 가비지 수집기 및 최소한 동일한 OOP, 다양한 유형의 입력 및 백만 가지 기타 항목)이 나타났습니다. 이는 출판 연도 때문에 해당 교과서에 없었습니다. 그리고 오늘날 C와 같은 레지스터 아키텍처의 컴파일을 위해 근본적으로 설계된 언어의 경우에도 십여 개의 통역사(1, 2, 3)가 있습니다... 다시 말하지만, 아무도 가상 머신을 호출하지 않습니다. , 왜냐하면 이것들은 모두 다른 개념입니다. 간단히 말해서, 플라톤과 아리스토텔레스가 이해했던 것처럼 양자역학에서 불, 물, 땅, 공기가 어디에 있는지 이해하려는 것과 같습니다. :)

추신 이 분류가 여전히 관련이 있었던 시기를 이해하려면 다음을 권장합니다. 이것. 그곳에서 최초의 진정한 해석 언어 중 하나인 APL의 창시자들은 당시 언어 개발의 시급한 문제에 대해 논의합니다. 영어가 문제라면 적어도 소개 부분을 보세요... 이러한 하드웨어는 최신 SIM 카드보다 메모리와 처리 능력이 낮습니다 :)

Java 바이트코드로 컴파일되어 JVM에서 실행될 수 있습니다.

JVM은 Java 플랫폼의 핵심 구성 요소입니다. Java 가상 머신은 다양한 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있으므로 Java는 미들웨어이자 자체 플랫폼으로 간주될 수 있으므로 "한 번 작성하면 어디서나 실행" 원칙이 적용됩니다. 많은 플랫폼에 하나의 바이트코드를 사용하면 Java를 "한 번 컴파일하고 어디서나 실행"할 수 있습니다.

JVM 사양

썬과 IBM의 대결

2001년에는 크로스 플랫폼 데스크탑 애플리케이션 표준 개발을 목표로 Eclipse를 개발했습니다.

IBM 비주얼에이지. IBM은 FSF가 인정한 Eclipse Public License에서 무료 커뮤니티의 이익과 비즈니스의 이익(그 이익)의 균형을 유지했습니다.

이 프로젝트는 성공적으로 개발되고 있으며 업계에서 인정을 받고 IBM에서 독립적인 Eclipse Foundation으로 분리되었습니다.


위키미디어 재단. 2010.

다른 사전에 "Java Virtual Machine"이 무엇인지 확인하십시오.

    자바 가상 머신- Java 런타임 시스템(Java Runtime Environment, JRE)의 주요 부분입니다. 자바 가상 머신(Java Virtual Machine)은 자바 컴파일러가 자바 프로그램의 소스 코드에서 미리 생성한 자바 바이트 코드를 해석하고 실행한다. JVM은... - JavaSoft에서 개발했습니다. 이를 사용하여 구축된 웹 애플리케이션은 운영 체제, 웹 브라우저 또는 Java Virtual Machine으로 알려진 에뮬레이션 환경 내에서 기본적으로 실행될 수 있습니다. E-비즈니스 사전

    - (JPF) 다중 스레드 Java 프로그램을 테스트하기 위한 무료 도구입니다. 핵심은 모델 검사 방법이 구현되는 기반이 되는 Java Virtual Machine입니다. 즉... ... 위키피디아

    자바 가상 머신- Java 프로그램용 바이트 코드 해석기. Java 애플릿을 실행하도록 설계된 가상 머신입니다. JVM은 대부분의 웹 브라우저에 내장되어 있습니다. 이를 통해 클라이언트 측에서 Java 애플릿을 실행할 수 있으며, 해당 호출은 ... ...에서 제공됩니다. 기술 번역가 가이드

    이 개념의 또 다른 이름은 "Java"입니다. 다른 의미도 참조하세요. JavaScript와 혼동하지 마십시오. Java 언어 클래스 ... Wikipedia

    번역의 품질을 확인하고 기사가 Wikipedia의 문체 규칙을 준수하도록 해야 합니다. 오류를 수정하면 이 문서를 개선하는 데 도움이 될 수 있습니다. 원본 n... Wikipedia



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: