Java'yı makine kodunda derlemek mümkün mü? (Bayt kodu değil)


32

Java'yı doğrudan makine koduna derleyebilir misiniz?

Bunu yapmak istiyorum, bu yüzden hangi platformlarda kullanıldığı üzerinde kontrolüm var ve C, C ++ vb. Bilmiyorum.

Yanıtlar:


36

Java için GNU Compiler'in Java kaynak kodunu Java bayt koduna veya makine koduna dönüştürebildiği anlaşılıyor . Ayrıca mevcut Java bayt kodunu makine koduna da dönüştürebilir. Bununla birlikte, son haberler 2009'dan beridir, bu yüzden ne kadar güncel olduğundan ve Java dilinin en son özelliklerini kullanabildiğinden emin değilim.


1
Java bayt kodu 2009'dan bu yana değişmediyse, yazılım geliştiricilerin "Hey! Hala buradayım" bayraklarını sallamadan çalışması gerekir.
— Robert Harvey,

@RobertHarvey Java 7'nin bazı yeni dil konseptleri getirdiğine inanıyorum, bu nedenle kaynak dosyaları makine koduna dönüştürmede başarısız olabilir. Bayt kodu da bu yeni özelliklerle değişmişse, o zaman da başarısız olur
— Thomas Owens

1
Excelsior JET hala aktif görünüyor (ticari). Fujitsu TowerJ vardı, ama bu on yıl önce öldü ve o zamanlar oldukça anlamsızdı.
— Tom Hawtin - tackline,

Java 6 kullanıyorum, bu yüzden Java 7 davamda sorun değil
— Russell

1
GCJ web sitesi Java 1.5'i bile tam olarak desteklemediğini söylüyor. Bu konuya bakın: stackoverflow.com/a/4040404/1257384
— GregT 10:18

13

OP'ye doğrudan cevap vermek değil, belki de ilginç bir yana. Java üç modda çalıştırılabilir:

  1. Karışık (varsayılan) - Yorumlanmış ve Makine derlenmiş kodunun bir kombinasyonu (makine derlenmiş == çalışma zamanında JIT tarafından derlendi)
  2. İle -Xintyorumlanır - - bayrak Bayt kodu yalnızca
  3. İle -XcompDerleyen - - bayrak makine derlenmiş

1
@Martjin Bu HotSpot için mi? Şans eseri -Xcomp, JDK 7 dokümantasyonunda veya HotSpot opsiyon dokümantasyonunda bir tanesini bulamadığım ve yalnızca ölümlülerin farkında olmadığı gizli bir posta listesi sırrınız olup olmadığından emin olamadığım için referansınız var mı?
— edalorzo

2
Bu kasıtlı olarak gizlenmiş bir seçenektir evet :-). Bu tür bilgileri toplayabileceğiniz çeşitli openjdk (openjdk.java.net) posta listeleri vardır - veya kaynak kodunu okuyabilirsiniz :-)
— Martijn Verburg

Lütfen, testlerime göre, -Xcomp’un bazı durumlarda daha düşük performansa (iki katına kadar) sahip olabileceğini unutmayın.
— Daniel Lemire

İyi evet. Tam zamanında, JIT'in çalışmadığı zamanlarda bile optimizasyon yapmak zor. Sahip olabilir!
— candied_orange

ummm bunlar seçenekler javacmi? -Xcomp kullanırken varsayılan olarak tek bir ikili dosya çıktı mı?
— Alexander Mills,

7

System.getProperty (“os.name”) kullanarak işletim sistemini tespit etmek daha iyi olabilir . Bu, birden fazla işletim sistemini desteklemeyi seçmenize izin verir, ancak diğerlerini dışlar.


Bunun kandırılmasının / oynanmasının bir yolu var mı?
— SinirliFormsDesigner'la

@Frustrated, muhtemelen, ama niyetinin resmi olarak test etmediği işletim sistemlerini desteklemekten sakınmak olduğunu düşünüyordum. Aksi takdirde ücretsiz olarak alabileceğiniz taşınabilirliği kasıtlı olarak devre dışı bırakmak anlamsızdır.
— Karl Bielefeldt

Ayrıca, programı işletim sistemi bağımsız bir şekilde belirli bir donanıma bağlamak istiyor olabilir.
— FrustratedWithFormsDesigner

JVM: için özel argümanlar kullanarak "os.name" sistem özelliğini zorlayabilirsiniz java -Dos.name=MacOS.
— SkyDan

2

Şimdi: GraalVM, programlarınızı vaktinden önce yerel bir çalıştırılabilir dosyada derlemenizi sağlar. Yerel görüntü özelliğine bir göz atın :

İlgili soru: 'Java'yı yerel kodla derleyebilir miyim?' https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050


PS GCJ artık korunmuyor.
Kaynak: 'gcj'nin Silinmesi' http://tromey.com/blog/?p=911

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.