Java를 네이티브 코드로 컴파일 할 수 있습니까?


82

JVM없이 Java에서 독립형 (또는 라이브러리) 기계어 코드로 컴파일 할 수있는 방법이 있습니까?


3
"컴파일"은 ( "컴파일"이 아니라) 찾고있는 단어입니다.
TJ Crowder

7
속도에 관심이 있다면 HotSpot (Sun의 JVM)이 지원하지 않는 플랫폼을보고 있지 않는 한 신경 쓰지 마십시오. HotSpot은 실행 경로 (많이 실행되는 것)의 "핫스팟"이 나타날 때마다 즉시 네이티브 코드로 바이트 코드를 컴파일하며, 매우 훌륭합니다. 그러나 JVM이 필요하지 않도록하려면 예, gcj James가 지적한 것을보십시오.
TJ Crowder

3
또 다른 이유는 Java 디 컴파일러에 대한 보호입니다. HotSpot 대 네이티브 컴파일러 (vs JRockit, IBM, GCC, Visual C ++, hand-writing-CPU-in-hex) 성능은 애플리케이션에 따라 다르므로 YMMV입니다.
Dmitry Leskov

1
Oracle에서 JServer Accelerator라는 Oracle 데이터베이스에 대한 흥미로운 개발을 발견했습니다. 또한 바이트 코드가 아닌 C 코드로 컴파일하여 어떤 방식 으로든 플랫폼 종속적으로 설계되었습니다. docs.oracle.com/cd/A87860_01/doc/java.817/a83727/jtools5.htm
supernova

6
이 질문이 중재자들에 의해 종료 된 이유를 이해할 수 없습니다. 나에게 완벽하게 분명해 보인다. 그들이 그것을 이해하지 못한다면 아마도 그들에게 문제가있을 것입니다.
isapir

답변:


40

GCC의 일부인 GCJ라는 도구가 있었지만 제거되었습니다 . 이제 GCC 사이트의 모든 링크는 GCC가 아닌 해당 링크로 리디렉션됩니다.

NB : 댓글은 모두 GCJ를 사용하여 Java를 네이티브 코드로 컴파일 할 수 있다는 원래 답변을 참조했습니다.


2
예, gcj는 가장 잘 알려진 것입니다. @ isola009 : 네이티브 코드로 컴파일 할 때 Java가 기본적으로 일반적으로 갖는 라이브러리 의 하위 집합 (아마도 극히 작은 하위 집합)으로 작업하게 될 것입니다 . Gnu는 모든 계정에서 꽤 훌륭하지만 현재 JDK보다 훨씬 뒤떨어져 있습니다.
TJ Crowder

1.2로 시작하는 모든 JDKS 뒤에 있습니다. 실수로 Java 대신 GNU 클래스 경로를 실행하는 사람들과 관련하여 많은 지원 문제가 발생했으며 예외없이이를 제거하고 Sun JDK를 사용하여 치료했습니다.
user207421

Excelsior JET에는 Java SE 6 표준 라이브러리의 라이센스 구현이 포함되어 있으며 공식 준수 테스트 (JCK)를 통과했습니다. 현재 6u18 수준이며 다음 버전은 6u20을 지원할 것으로 예상됩니다.
Dmitry Leskov

27

예!

오라클은 네이티브 이미지를 지원하는 GraalVm을 개발하고 있습니다. 여기에서 확인하십시오 : https://www.graalvm.org/

네이티브 이미지 GraalVM SDK의 네이티브 이미지 기능은 Java 애플리케이션의 시작 시간을 개선하고 더 작은 공간을 제공합니다. 사실상 이는 JVM (모든 플랫폼에서)에서 실행되는 바이트 코드를 특정 OS / 플랫폼 용 네이티브 코드로 변환하는 것입니다. 우수한 성능을 달성하기 위해 적극적인 AOT (Ahead-of-Time) 최적화를 사용하고 있습니다.

더보기:



"GraalVM 19.0 릴리스 :"GraalVM이 마침내 완성되어 프로덕션 용으로 사용할 준비가되었습니다. "물론 버그와 아직 완성되지 않은 일부 기능이있을 것입니다.하지만 트위터는 프로덕션 시스템에이를 사용하므로 첫 번째 의견에 동의하지 않습니다. 주장하고있다.
RobAu

내 개인적인 경험은 Windows장난감 프로그램에서만 작동하지만 더 고급 및 / 또는 사용할 때 GUI아직 거기에 있지 않다는 것입니다. Twitter아마 Linux전혀 사용 하지 GUI않지만 아마도 커뮤니티 버전 만 시도하는 동안 상용 버전도 사용할 것입니다. 일부 사용 사례에서는 작동 할 수 있지만 Java Windows데스크톱 응용 프로그램은 여전히 ​​프로젝트를 약간 실망스럽게 만드는 응용 프로그램 중 하나가 아닙니다. Excelsior JET이 작업을 안정적으로 수행 할 수 있지만 현재 중단되었습니다.
BullyWiiPlaza


10

예, JVM의 JIT가 정확히 수행합니다.

실제로 코드가 런타임에 사용되는 방식에 따라 특정 플랫폼에 최적화 된 코드를 생성 할 수 있으므로 코드를 미리 컴파일하는 것보다 더 빠른 코드를 생성 할 수 있습니다.

JVM은 바이트 코드를 동적으로로드하고 실행할 수 있으므로 매우 높은 비율이 원시 코드로 컴파일 되더라도 항상 관련됩니다.


18
네, 당신은 JIT가 그것을하고 아주 잘한다는 것이 맞습니다. 독립 실행 형 실행 파일을 만들지는 않지만 OP는 그것에 대해 묻지 않았습니다 ....
Bill K

2
JIT만이 플랫폼 별 최적화를 수행 할 수 있다고 제안하는 것 같습니다. 바이트 코드를 배송 할 때마다 가능하다고 생각합니다. ART는 설치시 바이트 코드를 원시 코드로 컴파일하며 JIT가 아닙니다. 피터, 이것에 대한 의견이 있습니까?
Janus Troelsen 2015

2
OP 언급, 독립형, 모든 종류의 JIT를 배제합니다. JIT는 즉석에서 네이티브 코드를 생성하지만 결코 독립형이 아닙니다.
StormByte

1
@KurtFitzner JIT 컴파일러가하는 일에 대해 매우 다른 생각을 가지고 있다고 생각합니다. 해석이 관련되지 않은 네이티브 코드로 컴파일됩니다.
Peter Lawrey

2
나는 JIT 컴파일러는 네이티브만큼 깊은 최적화로 감당할 수 있다고 생각하지 않습니다 AOT 컴파일러 / 링커 수행 컴파일 및 전체 최적화를 연결 해야 무릎에 컴퓨터를 넣어; 그렇지 않은 경우 컴파일러는 최적화를 위해 최선을 다하지 않습니다.
Johan Boulé

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.