क्या जावा को मशीन कोड में संकलित करना संभव है? (बायोटेक नहीं)


32

क्या आप जावा को सीधे मशीन कोड में संकलित कर सकते हैं?

मैं ऐसा करना चाहता हूं इसलिए मेरा इस पर नियंत्रण है कि यह किस प्लेटफॉर्म पर इस्तेमाल किया गया है, और सी, सी ++ आदि को नहीं जानता है।

जवाबों:


36

ऐसा प्रतीत होता है कि जावा के लिए GNU कंपाइलर जावा सोर्स कोड को जावा बायटेकोड या मशीन कोड में बदल सकता है। यह मौजूदा जावा बाइटकोड को मशीन कोड में भी बदल सकता है। हालाँकि, अंतिम समाचार 2009 का है, इसलिए मुझे यकीन नहीं है कि यह कितना चालू है और यदि यह जावा भाषा की नवीनतम विशेषताओं को संभाल सकता है।


1
यदि 2009 के बाद से जावा बाइटकोड नहीं बदला है, तो यह अभी भी डेवलपर्स के बिना काम करना चाहिए "अरे! मैं अभी भी यहां हूं" सॉफ्टवेयर पर झंडे।
रॉबर्ट हार्वे

@RobertHarvey मेरा मानना ​​है कि जावा 7 ने कुछ नई भाषा अवधारणाओं को पेश किया है, इसलिए यह स्रोत फ़ाइलों को मशीन कोड में परिवर्तित करने में विफल हो सकता है। बाईटकोड भी इन नई सुविधाओं के साथ बदल गया है, तो उस रूप में अच्छी तरह विफल हो जाएगा
थॉमस ओवेन्स

1
एक्सेलसियर JET अभी भी सक्रिय (वाणिज्यिक) लगती है। वहाँ Fujitsu TowerJ था, लेकिन लगता है कि एक दशक पहले मर गया था और तब बहुत बेकार था।
टॉम हॉकिन - 2

मैं जावा 6 का उपयोग कर रहा हूं इसलिए जावा 7 मेरे मामले में कोई समस्या नहीं है
रसेल

1
जीसीजे की वेबसाइट का कहना है कि उसने जावा 1.5 का भी पूरी तरह से समर्थन नहीं किया था। इस धागे को देखें: stackoverflow.com/a/4040404/1257384
ग्रेग सिप

13

सीधे ओपी का जवाब नहीं, लेकिन एक दिलचस्प बात है। जावा को तीन मोड में चलाया जा सकता है:

  1. मिश्रित (डिफ़ॉल्ट) - इंटरमिटेड और मशीन संकलित कोड का संयोजन (मशीन संकलित == रनटाइम पर JIT द्वारा संकलित)
  2. -Xintध्वज के साथ - व्याख्या - केवल बाइट कोड
  3. -Xcompध्वज के साथ - संकलित - मशीन संकलित

1
@Martjin इस हॉटस्पॉट के लिए कर रहे हैं? संयोग से आपके पास संदर्भ है -Xcompक्योंकि मुझे नहीं पता है कि जेडीके 7 दस्तावेज या हॉटस्पॉट विकल्पों में से एक दस्तावेज है और यह सुनिश्चित नहीं है कि आपके पास कुछ छिपे हुए मेलिंग सूची रहस्य हैं जो हम, केवल नश्वर, :-) के बारे में नहीं जानते हैं
एडलोरजो

2
यह जानबूझकर छिपा हुआ विकल्प है :-)। वहाँ विभिन्न Openjdk (openjdk.java.net) मेलिंग सूचियाँ हैं जिनसे आप इस तरह की जानकारी को प्राप्त कर सकते हैं - या स्रोत कोड को पढ़ सकते हैं :-)
मार्टिजेन वर्बर्ग

कृपया ध्यान दें कि मेरे परीक्षणों के अनुसार, कुछ उदाहरणों में -Xcomp का खराब प्रदर्शन (दो के कारक से) हो सकता है।
डैनियल लेमायर

अच्छी तरह से हाँ। जब JIT रनिंग भी नहीं कर रहा हो तो बस समय पर अनुकूलन करना कठिन होता है। हो सकता है! = होगा।
कैंडिड_ऑरेंज

ummm तो ये विकल्प हैं javac? -Xcomp का उपयोग करते समय यह डिफ़ॉल्ट रूप से एकल बाइनरी फ़ाइल द्वारा करता है?
अलेक्जेंडर मिल्स

7

System.getProperty ("os.name") का उपयोग करके ऑपरेटिंग सिस्टम का पता लगाना बेहतर हो सकता है । यह आपको एक से अधिक ओएस का समर्थन करने का चयन करने देगा, लेकिन दूसरों को बाहर कर देगा।


क्या कोई ऐसा तरीका है जिससे इसे बेवकूफ बनाया जा सकता है?
FrustratedWithFormsDesigner

@ दिया गया, शायद, लेकिन मैं यह मान रहा था कि वह आधिकारिक तौर पर समर्थित ऑपरेटिंग सिस्टम से रखने के लिए है जिसे उसने परीक्षण नहीं किया है। यह अन्यथा जानबूझकर अक्षमता को अक्षम नहीं करता है जो आपको अनिवार्य रूप से मुफ्त मिलता है।
कार्ल बेवफेल्ड

यह भी हो सकता है कि वह ओएस के स्वतंत्र प्रकार में प्रोग्राम को विशिष्ट हार्डवेयर से जोड़ना चाहता हो।
FrustratedWithFormsDesigner

आप JVM के लिए विशेष तर्कों का उपयोग करके "os.name" सिस्टम गुण को बाध्य कर सकते हैं java -Dos.name=MacOS:।
स्काईडैन

2

यह अब है: GraalVM आपको अपने कार्यक्रमों को आगे बढ़ाने के लिए देशी निष्पादन योग्य में संकलित करने की अनुमति देता है। देशी-छवि विशेषता पर एक नज़र डालें :

संबंधित प्रश्न: 'क्या मैं जावा को देशी कोड में संकलित कर सकता हूं?' https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050


पीएस जीसीजे का रखरखाव अभी नहीं किया गया है।
स्रोत: 'द डिलीट ऑफ gcj' http://tromey.com/blog/?p=911

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.