คุณสามารถคอมไพล์ Java โดยตรงในรหัสเครื่องได้หรือไม่?
ฉันต้องการทำสิ่งนี้ดังนั้นฉันจึงสามารถควบคุมได้ว่าจะใช้แพลตฟอร์มใดและไม่รู้ว่า C, C ++ เป็นต้น
คุณสามารถคอมไพล์ Java โดยตรงในรหัสเครื่องได้หรือไม่?
ฉันต้องการทำสิ่งนี้ดังนั้นฉันจึงสามารถควบคุมได้ว่าจะใช้แพลตฟอร์มใดและไม่รู้ว่า C, C ++ เป็นต้น
คำตอบ:
ปรากฏว่าGNU Compiler สำหรับ Javaสามารถแปลงซอร์สโค้ด Java เป็น Java bytecode หรือรหัสเครื่อง นอกจากนี้ยังสามารถแปลง Java bytecode ที่มีอยู่เป็นรหัสเครื่องได้ อย่างไรก็ตามข่าวล่าสุดมาจาก 2009 ดังนั้นฉันไม่แน่ใจว่ามันเป็นปัจจุบันและถ้ามันสามารถจัดการคุณสมบัติล่าสุดของภาษาจาวา
ไม่ตอบ OP โดยตรง แต่อาจเป็นสิ่งที่น่าสนใจ Java สามารถเรียกใช้ในสามโหมด:
-Xint
ตั้งค่าสถานะ - ตีความ - รหัสไบต์เท่านั้น-Xcomp
flag - รวบรวม - รวบรวมเครื่อง-Xcomp
เพราะฉันไม่พบว่าหนึ่งในเอกสาร JDK 7 หรือเอกสารตัวเลือก HotSpot และไม่แน่ใจว่าคุณมีความลับรายชื่อผู้รับจดหมายที่ซ่อนอยู่ที่เรามนุษย์ปุถุชนไม่ได้ตระหนักถึง :-)
javac
อะไร? เมื่อใช้ -Xcomp มันจะทำการเริ่มต้นด้วยไฟล์ไบนารีไฟล์เดียวหรือไม่?
มันอาจจะดีกว่าที่จะตรวจสอบระบบปฏิบัติการที่ใช้System.getProperty (“os.name”) นั่นจะช่วยให้คุณเลือกที่จะสนับสนุนมากกว่าหนึ่งระบบปฏิบัติการ แต่ไม่รวมระบบอื่น
java -Dos.name=MacOS
JVM:
คือตอนนี้: GraalVM ช่วยให้คุณสามารถคอมไพล์โปรแกรมของคุณล่วงหน้าไปสู่การปฏิบัติการแบบเนทีฟ ดูฟีเจอร์native-image :
สรุป
https://www.graalvm.org/docs/getting-started/#native-images
การสาธิต: รูปภาพพื้นเมืองเพื่อการเริ่มต้นที่รวดเร็วขึ้น
https://www.graalvm.org/docs/examples/native-list-dir/
รายละเอียด: 'การรวบรวมล่วงหน้า'
https://www.graalvm.org/docs/reference-manual/aot-compilation/
คำถามที่เกี่ยวข้อง: 'ฉันสามารถคอมไพล์ Java เป็นโค้ดเนทีฟได้หรือไม่' https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050
PS GCJ ไม่ได้รับการบำรุงรักษาอีกต่อไป
ที่มา: 'การลบ gcj' http://tromey.com/blog/?p=911