문제

아무것도 할 수 있는 코드로 당신이 할 수 있는 쉽게 그리고 훨씬 더 빠르게 기본 코드입니다.이론적으로,당신은 심지어 플랫폼을 유지하고 독립 언어 배포하여 프로그램과 라이브러리에서 바이트 코드는 다음 네이티브 코드를 컴파일에서 설치,오히려 보다 JITing 니다.

그래서 일반적으로 할 때,당신을 실행하려면 대신 바이트코드의 기본?

도움이 되었습니까?

해결책

행 Shiffman 에서 SGI 말했다(시간이 오래 전에,그러나 그것 때까 true):

세 가지 이점 Java 바이트 코드를 사용하는 대신 가 기본 코드 시스템의:

  1. 휴대:각 컴퓨터의 종류는 독특한 교육 설정합니다.일부 프로세서 포함 에 대한 지침 그들의 전임자 그것은 일반적으로 사실 프로그램 에서 실행되는 종류의 컴퓨터 에서 실행되지 않습니다.에 추가 제공하는 서비스는 운영 체제 시스템,이는 각 시스템에 대해 설명 그것의 자신의 독특한 방식으로,당신 호환성 문제입니다.일반적으로,당신 할 수 있는지를 작성하고 컴파일을 위한 프로그램 한 종류의 시스템에서 실행하는 것 모든 다른없이 많은 작업입니다.자바옵 이러한 제한에 삽입하여 가상 기계 사 응용 프로그램과 실제 환경 (컴퓨터+영 시스템)가 있습니다.는 경우 응용 프로그램 컴파일을 바이트 Java 코드는 바이트 코드 해석됩니다 같은 방법으로 모든 환경에서 다음 를 작성할 수 있습니다 하나의 프로그램 에서 작동하는 모든 다른 플랫폼 Java 지원합니다.(는 이론이다.에 연습이 있다는 항상 작은 호환성 대기에 누워있는 대 프로그래머.)

  2. 보안:중 하나 Java 의 미덕은 그것의 통합으로 웹.드 을 사용하는 웹 페이지 Java 로 브라우저에 자바 코드 자동으로 다운로드 및 실행됩니다.하지만 어떤 경우에는 코드를 파괴,파일 지를 통한 악의 또는 엉성함 에서 프로그래머의 부분입니까?Java 을 방지 다운로드 애플릿에서 일 아무것도 파괴적인에 의해 허용 잠재적으로 위험한 작업입니다.기 전에 그것이 허용하는 코드를 실행 그것을 검사 시도에 대한 바이 패스 보안입니다.그것은을 확인하는 데이터는 지속적으로 사용:코드 를 조작하는 데이터 항목으로 정수 에서 하나의 무대로 다시 시도 그것을 사용하는 로 포인터이상이 발견되고 방해에서 실행됩니다.(Java 언어는 허용되지 않 포인터 산,그래서 당신은 쓸 수 없습니다 Java 코드를 무엇을 우리는 단지 설명한다.그러나 아무것도 없지 누군가에서 작성이 파괴적인 바이트 코드는 자신을 사용하수 편집기 또는 건축 Java 바이트 코드 assembler.) 그것은 일반적으로 아닙 가능해 분석 프로그램 기계 코드를 실행하기 전에고 는지 여부를 결정 그것은 아무것도 나쁘다.트릭처럼 쓰기 자체 수정하는 코드를 의미하는 악한 작업할 수 있도 존재하지 않을 때까지 니다.그러나 자바 바이트 코드를 디자인 이러한 종류의 유효성 검사:그 이 없는 지 a 악성 프로그래머가 사용하는 것을 숨기기 그들의 공격입니다.

  3. 크기:마이크로프로세서 세계 RISC 은 일반적으로 바람직 이 CISC.그것의 더 작은 명령어 집합 및 사용하는 많은 빠르 지하 작업하는 것보다 많은 복잡한 작업으로 구현 단 하나다.RISC 디자인 이 적게 필요한 문서 칩이 구현의 지시할 수 있도록, 에 대한 더 많은 공간에 대한 파이프라인 및 기타 의 방법으로 만들어 볼 수 있는 각 명령어 빠릅니다.에서 통역사,그러나, 아무도 이 문제입니다.하려는 경우 를 구현하는 하나의 명령에 switch 문수 길이의 수에 따라 케이스 절지 않을 이유가 없습니지 니다.실제로,복잡한 명령어 설정 는 이점에 대해 웹 기반 언어:그것이 의미하는 동 프로그램이 작은 것입니다(적게 의 지침을 더 복잡), 는 더 적은 시간을 의미를 전송 에서 우리의 속도를-제한된 네트워크입니다.

그래서 고려할 때 바이트 코드 vs 네이티브,고려 trade-offs 만들고 싶은 사 휴대성,보안,크기,그리고 실행 속도를 높입니다.는 경우 속도가 유일한 중요한 요소이며,이동합니다.는 경우 다른 사람들이 더 중요하고,가진 바이트 코드.

나도 추가를 유지하는 시리즈의 OS 과 건축-대상의 컴파일 코드 기반을 위한 모든 자료가 될 수 있는 매우 지루한 수 있습니다.그것은 거대한 승리를 사용하여 동일한 Java bytecode 여러 플랫폼에서 그것을"그냥 작동합니다."

다른 팁

의 성능을 기본적으로 모든 프로그램으로 향상됩니다면 그것은 컴파일된 실행파일,그 결과를 다시 컴파일러를 위한 두 번째 전달합니다.코드 경로가 있는 실제로 사용하는 것이 더 적극적으로 최적화되어,루프에 풀을 정확히 오른쪽 정도,그리고 뜨거운 교육 경로를 극대화하기 위해 배치된 그러니다.

모든 좋은 물건,아직 그것은 거의 끝이 없기 때문에 그것은 성가를 통해 이동하는 많은 단계를 구축하는 바이너리입니다.

이것은 이점의 실행하는 바이트 코드는 컴파일하기 전에 그것을 기본 코드:프로파일링 정보를 자동으로 사용할 수 있습니다.그 결과 후 다시 컴파일이 고도로 최적화된 기본 코드에 대한 특정한 데이터 프로그램이 처리합니다.

되고 실행할 수 있는 바이트 코드를 가능한 보다 적극적인 기본 최적화보다는 정적 컴파일할 수 있다.는 경우 예를 들어,하나의 인수 기능이 주목을 항상 NULL,모두 처리한 것을 인수할 수 있는 단순히 생략하면서 원시 코드입니다.가 될 것입니다 간단한 유효성 확인을 인수의 함수에서 프롤로그는 경우,인수가 NULL 이 아니면 VM 중단에 다시 바이트코드 시작으로 다시 프로파일링.

바이트 코드를 만듭니다 추가 수준의 간접 참조.

의 장점 이 추가 수준의 간접습니다:

  • 플랫폼 독립
  • 의 번호를 만들 수 있습 프로그래밍 언어(구)및 그들을 컴파일에 아래로 동일한 바이트 코드.
  • 수 쉽게 만들기 십자가 언어 변환기
  • x86,x64,그리고 IA64 더 이상 컴파일할 필요로 별도 있습니다.만 적절한 가상 기계의 요구를 설치할 수 있습니다.
  • 각각의 OS 단순히 필요로하는 가상 컴퓨터를 만들고 그것은이 지원한 프로그램입니다.
  • 그냥 시간에 컴파일할 수 있습 업데이트 프로그램을 교체하여 하나의 패치 소스 파일입니다.(매우 유용한 웹 페이지)

몇몇은의 단점:

  • 성능
  • 쉽게 디컴파일

모든 좋은,그러나 나의 뜨거운-버튼을 칠 수 있습니다.

는 경우에는 코드는 실행을 보낸 모든 시간을 전화 라이브러리/시스템을 파일 작업,데이터베이스 작동을 전송,windows 메시지를,그것은 중요하지 않 매우 많은 경우 JITted 기 때문에,대부분의 시간은 기다리는 사람들을 위해 낮은 수준 작업을 완료합니다.

그러나, 는 경우 코드가 포함되어 있습니다 일을 우리는 보통화"알고리즘",해야 하는 빠르고 많은 시간을 할애하지 않는 함수를 호출하는 면 사람들은 자주 사용하는 성능 문제를 JIT 은 매우 중요합니다.

내가 생각하는 당신은 단지 자신의 질문에 대답:플랫폼 독립성이다.플랫폼-독립적인 바이트 코드의 생성과 분산하여 그것의 타겟 플랫폼입니다.실행될 때 그것은 신속하게 컴파일을 기본 코드나 실행이 시작되기 전에,또는 동시에(그냥 시간).Java JVM 및 아마도.NET 런타임이에서 작동이 원칙입니다.

여기: http://slashdot.org/developers/02/01/31/013247.shtml

가 참조의 괴짜 Slashdot have to say about it!작은 일이지만,매우 좋은 의견을 환영합니다.

이상적으로 당신은 것 휴대용 바이트 코드를 컴파일하는 시간에 단지 원시 코드입니다.내가 생각하는 이유는 바이트 코드 해석은 존재하지 않고 JIT 은 주로 실질적인 사실을 기본 코드를 컴파일을 복잡성을 추가 있습니다.그것은 시간을 구축,디버깅,그리고 유지하는 추가적인 구성 요소입니다.모든 사람이 시간 또는 리소스 그 약속입니다.

이차 요인은 안전합니다.그것은 훨씬 쉽게 확인하는 통역사 충돌이 없상을 보장하는 동일한 기본 코드입니다.

세 번째는 성능이다.그것은 종종 더 많은 시간이 걸릴를 생성하는 컴퓨터 코드보다 해석하는 바이트 코드 작은 조각의 코드는 단 한 번 실행됩니다.

이동성과 플랫폼 독립은 아마도 가장 주목할만한 이점이의 바이트 코드를 통해 원시 코드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top