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.