क्या मैं जावा को देशी कोड में संकलित कर सकता हूं?


82

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


3
"संकलन" वह शब्द है जिसकी आप तलाश कर रहे हैं (बजाय "संकलित")।
टीजे क्राउडर

7
यदि आपकी रुचि गति है, तब तक परेशान न हों जब तक आप एक ऐसे प्लेटफ़ॉर्म को नहीं देख रहे हैं जो हॉटस्पॉट (सन का जेवीएम) का समर्थन नहीं करता है। हॉटस्पॉट फ्लाई कोड पर मूल कोड को बायटेकोड को संकलित करता है जहां निष्पादन पथ का एक "हॉटस्पॉट" (कुछ जो बहुत भाग जाता है) दिखाता है, और यह बहुत अच्छा है। लेकिन अगर आप एक जेवीएम की आवश्यकता से बचने के लिए देख रहे हैं, तो हाँ, जेम्स जेम्स ने आपको बताया।
टीजे क्राउडर

3
अभी तक एक और कारण जावा डीकॉम्पिलर के खिलाफ सुरक्षा है। हॉटस्पॉट बनाम देशी संकलक (बनाम JRockit बनाम IBM बनाम GCC बनाम विज़ुअल C ++ बनाम हाथ से लिखने-सीपीयू-निर्देश-में-हेक्स) प्रदर्शन के लिए, यह एप्लिकेशन पर निर्भर करता है, इसलिए YMMV।
दिमित्री लेकोव

1
मुझे ओरेकल द्वारा एक दिलचस्प विकास मिला जिसमें Oracle डेटाबेस JServer Accelerator नाम था। इसे किसी तरह से बाईटकोड्स से नहीं बल्कि सी कोड के आधार पर प्लेटफॉर्म डिपेंडेंट के रूप में डिजाइन किया गया था। docs.oracle.com/cd/A87860_01/doc/java.817/a83727/jtools5.htm
सुपरनोवा

6
मुझे समझ में नहीं आता है कि यह प्रश्न मध्यस्थों द्वारा बंद क्यों किया गया था। यह मुझे पूरी तरह से स्पष्ट लगता है। अगर वे इसे नहीं समझते हैं तो शायद समस्या उनके साथ है।
isapir

जवाबों:


40

जीसीजे नामक एक उपकरण हुआ करता था जो जीसीसी का हिस्सा था, लेकिन इसे हटा दिया गया । अब, जीसीसी साइट के सभी लिंक अपने गैर-जीसीजे समकक्षों को फिर से निर्देशित करते हैं।

नायब: सभी टिप्पणियों ने मेरे मूल उत्तर का हवाला देते हुए कहा कि आप जावा को मूल कोड में जीसीजे के साथ संकलित कर सकते हैं।


2
हाँ, gcj सबसे अच्छी तरह से जाना जाता है। @ isola009: ध्यान रखें कि मूल कोड को संकलित करते समय, आप संभवतः पुस्तकालयों के एक उपसमुच्चय (संभवतः नाटकीय रूप से छोटा उपसमुच्चय) के साथ काम करेंगे जो जावा सामान्य रूप से डिफ़ॉल्ट रूप से होता है। सभी खातों से, लेकिन वर्तमान JDK के पीछे, Gnu की स्थिति बहुत अच्छी है।
टीजे क्राउडर

1.2 से शुरू होने वाली सभी JDKS से यह अच्छी तरह से पीछे है । मुझे जावा के बजाय गलती से जीएनयू क्लासपथ चलाने वाले लोगों के साथ कई समर्थन समस्याओं का सामना करना पड़ा है, और वे सभी अपवाद के बिना इसे अनइंस्टॉल करके और सन जेडडीके का उपयोग करके ठीक किए गए थे।
user207421

एक्सेलसियर जेईटी में जावा एसई 6 मानक पुस्तकालय का लाइसेंस प्राप्त कार्यान्वयन शामिल है और आधिकारिक अनुपालन परीक्षण (जेसीके) पारित किया है। यह अब 6u18 के स्तर पर है, अगले संस्करण में 6u20 का समर्थन करने की उम्मीद है।
दिमित्री लेकोव

27

हाँ!

Oracle, GraalVm पर काम कर रहा है, जो मूल छवियों का समर्थन करता है। यहां देखें: https://www.graalvm.org/

मूल छवि : GraalVM SDK के साथ मूल छवि सुविधा जावा अनुप्रयोगों के स्टार्टअप समय को बेहतर बनाने में मदद करती है और उन्हें एक छोटा पदचिह्न प्रदान करती है। प्रभावी रूप से, यह एक विशिष्ट ओएस / प्लेटफॉर्म के लिए देशी कोड के लिए जेवीएम (किसी भी मंच पर) पर चलने वाले बायटेकोड को परिवर्तित कर रहा है - जो कि प्रदर्शन से आता है। यह अच्छा प्रदर्शन प्राप्त करने के लिए आक्रामक फॉर-टाइम (एओटी) अनुकूलन का उपयोग कर रहा है।

और देखें:


अफसोस की बात है कि यह परियोजना भी उत्पादन के लिए स्थिर नहीं है और स्विंग एपीआई का उपयोग अभी भी असमर्थित / छोटी गाड़ी है: github.com/oracle/graal/issues/1327
BullyWiiPlaza

"GraalVM 19.0 रिलीज़:" GraalVM आखिरकार परिपक्व है और उत्पादन उपयोग के लिए तैयार है "बेशक इसमें कीड़े और कुछ नहीं-अभी तक पूर्ण कार्यक्षमता होगी। लेकिन ट्विटर अपने उत्पादन प्रणालियों के लिए इसका उपयोग करता है, इसलिए मैं आपके पहले से सहमत नहीं हूं। दावा।
रोबौ

मेरा व्यक्तिगत अनुभव यह है कि Windowsकेवल खिलौना कार्यक्रमों पर काम होता है, लेकिन कुछ और अधिक उन्नत और / या जब GUIतक अभी तक काफी उपयोग नहीं होता है। Twitterशायद Linuxबिना किसी का उपयोग करता है, GUIलेकिन वे शायद व्यावसायिक संस्करण का उपयोग करते हैं, जबकि मैंने केवल एक समुदाय की कोशिश की। यह कुछ उपयोग के मामलों के लिए काम कर सकता है लेकिन जावा Windowsडेस्कटॉप एप्लिकेशन उनमें से एक नहीं है जो अभी भी परियोजना को थोड़ा निराशाजनक बनाता है। Excelsior JETयह मज़बूती से कर सकता था लेकिन अब इसे बंद कर दिया गया है।
बुलीविप्लाजा

19

एक्सेलसियर JET देशी कोड कंपाइलर के लिए एक वाणिज्यिक जावा है। हालांकि, मई 2019 में इसे बंद कर दिया गया था।


3
बस के मामले में, गैर-वाणिज्यिक परियोजनाओं के लिए मुफ्त लाइसेंस हैं।
दिमित्री लेकोव

1
इसकी तुलना रोबो वीएम से कैसे की जाती है?
Janus Troelsen

15 मई, 2019 को एक्सेलसियर जेईटी को बंद कर दिया गया था। देखें: en.wikipedia.org/wiki/Excelsior_JET
Stephan

10

हां, JVM में JIT आपके लिए ठीक यही करता है।

वास्तव में यह कोड को पहले से संकलित करने की तुलना में तेजी से कोड का उत्पादन कर सकता है क्योंकि यह उस विशिष्ट प्लेटफॉर्म के लिए अनुकूलित कोड उत्पन्न कर सकता है जो कोड रनटाइम में कैसे उपयोग किया जाता है।

JVM हमेशा शामिल होता है, भले ही बहुत उच्च प्रतिशत मूल कोड के लिए संकलित हो, क्योंकि आप बाइट कोड को गतिशील रूप से लोड और चला सकते हैं।


18
हां, आप सही हैं कि जेआईटी इसे करता है और इसे बहुत अच्छी तरह से करता है। यह एक स्टैंड-अलोन निष्पादन योग्य नहीं है, लेकिन तब ओपी उस बारे में नहीं पूछ रहा था ....
बिल के

2
आप सुझाव देते हैं कि केवल JIT प्लेटफ़ॉर्म-विशिष्ट अनुकूलन कर सकता है। मुझे लगता है कि यह संभव है जब भी आप bytecode शिपिंग कर रहे हैं। एआरटी स्थापना पर मूल कोड के लिए बायटेकोड को संकलित करता है, और यह एक जेआईटी नहीं है। पीटर, क्या आपके पास इस पर कोई टिप्पणी है?
Janus Troelsen

2
ओपी का उल्लेख है, स्टैंडअलोन, जो कि किसी भी प्रकार के JIT का उदाहरण देता है: जबकि JIT मक्खी पर देशी कोड का उत्पादन करता है, यह कभी भी स्टैंडअलोन नहीं होता है।
स्टॉर्मबाइट

1
@KurtFitzner मुझे लगता है कि आपके पास JIT कम्पाइलर क्या करता है, इसका एक बहुत अलग विचार है, यह मूल कोड का संकलन करता है जहां व्याख्या शामिल नहीं है।
पीटर लॉरी

2
मुझे विश्वास नहीं है कि एक जेआईटी कंपाइलर उतने ही गहरे अनुकूलन कर सकता है जितना कि देशी एओटी कंपाइलर / लिंकर्स करते हैं: पूर्ण अनुकूलन के साथ संकलन और लिंक करना किसी भी कंप्यूटर को अपने घुटनों पर रखना चाहिए ; यदि नहीं, तो संकलक अनुकूलन करने का सबसे अच्छा प्रयास नहीं कर रहा है।
जोहान बोउले

0

एक और संभावना होगी RoboVM। हालांकि, यह केवल काम करने के लिए लगता है Linux, iOSऔर Mac OS X

आज तक, परियोजना अभी भी कुछ पदों के विपरीत कुछ जीवित लगती है ऑनलाइन परियोजना को मृत होने का दावा करती है

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