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.