Java를 기계 코드로 컴파일 할 수 있습니까? (바이트 코드 아님)


32

Java를 기계 코드로 직접 컴파일 할 수 있습니까?

이 작업을 수행하여 사용되는 플랫폼을 제어하고 C, C ++ 등을 모릅니다.

답변:


36

Java 용 GNU 컴파일러는 Java 소스 코드를 Java 바이트 코드 또는 기계 코드로 변환 할 수 있는 것으로 보입니다 . 기존 Java 바이트 코드를 기계 코드로 변환 할 수도 있습니다. 그러나 최신 뉴스는 2009 년부터이므로 최신 상태인지, Java 언어의 최신 기능을 처리 할 수 ​​있는지 잘 모르겠습니다.


1
2009 년 이후 Java 바이트 코드가 변경되지 않은 경우에도 개발자가 소프트웨어 위에 "이봐!
Robert Harvey

@RobertHarvey Java 7이 새로운 언어 개념을 도입했다고 생각하므로 소스 파일을 기계 코드로 변환하지 못할 수 있습니다. 바이트 코드가 이러한 새로운 기능으로 변경 되었다면, 그 역시 실패 할 것입니다
Thomas Owens

1
Excelsior JET은 여전히 ​​활성 상태 인 것 같습니다 (상업용). Fujitsu TowerJ가 있었지만 10 년 전에 사망 한 것으로 보이며 그 당시에는 무의미했습니다.
Tom Hawtin-tackline

Java 6을 사용하고 있으므로 Java 7은 문제가되지 않습니다.
Russell

1
GCJ 웹 사이트는 Java 1.5조차도 완전히 지원하지 않았다고 말합니다. 이 스레드를 참조하십시오 : stackoverflow.com/a/4040404/1257384
GregT

13

OP에 직접 대답하는 것은 아니지만 아마도 흥미로울 것입니다. Java는 세 가지 모드로 실행될 수 있습니다.

  1. 혼합 (기본값)-해석 및 기계 컴파일 코드 조합 (기계 컴파일 == 런타임시 JIT에 의해 컴파일)
  2. -Xint해석 - - 플래그 바이트 코드 만
  3. 함께 -Xcomp컴파일 - - 플래그 기계 컴파일

1
@Martjin 이것은 HotSpot을위한 것입니까? 우연히 -XcompJDK 7 문서 또는 HotSpot 옵션 문서에서 찾을 수 없으며 우리가 단순한 필사자가 모르는 숨겨진 메일 링리스트 비밀이 있는지 확실하지 않기 때문에 참조에 대한 정보를 얻지 못합니다.
edalorzo

2
고의로 숨겨진 옵션입니다. yes :-). 또는 소스 코드 :-) 읽기 - 다양한 오픈 JDK (openjdk.java.net) 메일 링리스트는에서 정보의 종류를 주울 수 있습니다
마티 Verburg

필자의 테스트에 따르면 일부 경우에 -Xcomp의 성능이 2 배 떨어질 수 있습니다.
Daniel Lemire

그래 JIT가 실행 중이 지 않은 경우 적시에 최적화하기가 어렵습니다. 가질 수 있습니다! = 가질 것입니다.
candied_orange

음, 이것들은 옵션 javac입니까? -Xcomp를 사용할 때 기본적으로 단일 바이너리 파일을 출력합니까?
Alexander Mills

7

System.getProperty (“os.name”)을 사용하여 운영 체제를 감지하는 것이 좋습니다 . 그렇게하면 둘 이상의 OS를 지원하도록 선택할 수 있지만 다른 OS는 제외 할 수 있습니다.


이것이 속일 수있는 방법이 있습니까?
FrustratedWithFormsDesigner

@Frustrated, 아마도, 그러나 그의 의도는 그가 테스트하지 않은 운영 체제를 공식적으로 지원하는 것이 아니라고 가정했습니다. 본질적으로 자유 로워지는 이식성을 의도적으로 비활성화하는 것은 이치에 맞지 않습니다.
Karl Bielefeldt

또한 OS 독립적 인 방식으로 프로그램을 특정 하드웨어에 연결하려고 할 수도 있습니다.
FrustratedWithFormsDesigner 2016

JVM에 특수 인수를 사용하여 "os.name"시스템 특성을 강제 실행할 수 있습니다 java -Dos.name=MacOS.
SkyDan

2

현재 : GraalVM을 사용하면 미리 프로그램을 기본 실행 파일로 컴파일 할 수 있습니다. 기본 이미지 기능을 살펴보십시오 .

관련 질문 : '자바 코드를 Java로 컴파일 할 수 있습니까?' https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050


PS GCJ는 더 이상 유지되지 않습니다.
출처 : 'gcj의 삭제' http://tromey.com/blog/?p=911

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