जावा संकलक और JVM किस भाषा में लिखे गए हैं?


195

जावा कंपाइलर ( javac), वर्चुअल मशीन (JVM) और javaस्टार्टर किस भाषा में लिखे गए हैं?


23
मैं जावा पर काम करता हूं इसलिए मैं भाषा के बारे में जानना चाहता हूं ... :)
राहुल गर्ग

26
इसका परिप्रेक्ष्य। चलो कहते हैं कि यू ने 20 वर्षों तक किसी तकनीक पर काम किया और साक्षात्कारकर्ता आपसे पूछते हैं कि यह किस भाषा में लिखा गया है या यह कैसे काम करता है, तो आप कह सकते हैं कि आपको इसकी परवाह नहीं है इसका मतलब है कि आप लिखना चाहते हैं यदि भाषा में और नहीं चाहते हैं वास्तव में भाषा को समझने के लिए।
राहुल गर्ग

22
और अधिक मुझे लगता है कि ज्ञान कभी भी बर्बाद नहीं होता है। कुछ जानना समय की बर्बादी नहीं है।
राहुल गर्ग

1
... एक मैकेनिकल इंजीनियर या एक रेस ड्राइवर (रूपक को फैलाने के लिए)
एपीगा

2
@ पैक्सडीब्लो कार चलाना कुछ ऐसा है जो आप करते हैं, लेकिन आपका पेशा नहीं। रेस कार चालकों को परवाह हो सकती है कि इंजन कैसे काम करते हैं। मैं यह नहीं कह रहा हूं कि वे सभी देखभाल कर रहे हैं .. लेकिन अगर एक रेस कार चालक ने इस बारे में अधिक जानना चाहा कि जिस कार को चलाने के लिए उसे भुगतान किया जाता है, उस इंजन पर काम कैसे किया जाता है, तो क्या आप सोचेंगे कि यह अनुचित है?
जद इसाक्स

जवाबों:


171

प्रश्न का सटीक विवरण थोड़ा भ्रामक है: यह "JVM" या "संकलक" नहीं है क्योंकि वहाँ कई JVM विक्रेता हैं (jrockit एक है, IBM दूसरा) और कई संकलक वहाँ हैं।

  • सन जेवीएम में लिखा गया है C, हालांकि यह मामला होने की जरूरत नहीं है - जेवीएम जैसा कि आपकी मशीन पर चलता है, एक प्लेटफॉर्म पर निर्भर निष्पादन योग्य है और इसलिए मूल रूप से किसी भी भाषा में लिखा जा सकता है। उदाहरण के लिए, मूल आईबीएम जेवीएम को स्मालटाक में लिखा गया था

  • जावा पुस्तकालयों ( java.lang, java.utilआदि, जिसे अक्सर जावा एपीआई के रूप में जाना जाता है ) को स्वयं जावा में लिखा जाता है, हालांकि nativeजिन तरीकों को चिह्नित किया गया है वे Cया में लिखे गए होंगे C++

  • मेरा मानना ​​है कि सन द्वारा प्रदान किया गया जावा संकलक भी जावा में लिखा गया है। (हालांकि फिर से, वहाँ कई संकलक हैं)


मुझे लगता है कि वह "जावा" कार्यक्रम का मतलब है कि आप एक जेवीएम शुरू करने के लिए उपयोग करते हैं।
स्टीफन C

1
दरअसल, सन के JRE में एक लाइब्रेरी NetRexx में लिखी गई है। (यह मनमाना सटीक गणित पुस्तकालयों में से एक है, या तो BigInteger, BigNum या BigDecimal। मैं भूल गया था कि कौन सा है।) सिद्धांत रूप में, आप JRE को लागू करने के लिए किसी भी भाषा का उपयोग कर सकते हैं, जब तक कि यह एक जावा प्रोग्राम का प्रतिनिधित्व कर सकता है। समझना।
जोर्ग डब्ल्यू मित्तग

18
कृपया सी। में लिखा जा रहा सूर्य जेवीएम का संदर्भ प्रदान करें
मोहम्मद बन

8
हॉटस्पॉट JVM C ++ में लिखा गया है - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi लिंक टूट गया है और अब इसमें रहता है: stroustrup.com/applications.html
flup

80

बहुत पहले जावा कंपाइलर को सन माइक्रोसिस्टम्स द्वारा विकसित किया गया था और सी में सी + + से कुछ पुस्तकालयों का उपयोग करके लिखा गया था। आज जावा में जावा कंपाइलर लिखा जाता है, जबकि JRE को C में लिखा जाता है।

हम कल्पना कर सकते हैं कि जावा कंपाइलर को जावा में इस तरह कैसे लिखा गया था:

जावा कंपाइलर को जावा प्रोग्राम के रूप में लिखा जाता है और फिर सी (पहले जावा कंपाइलर) में लिखे जावा कंपाइलर के साथ संकलित किया जाता है। इस प्रकार हम जावा प्रोग्राम को संकलित करने के लिए नए संकलित जावा कंपाइलर (जावा में लिखे गए) का उपयोग कर सकते हैं।


31
+1 यह बताने के लिए कि जावा में जावा कंपाइलर कैसे लिखा जा सकता है :)
एडुआर्ड लुका

2
नए संकलकों को "अपग्रेड" करने की इस प्रक्रिया को और अधिक मूल संकलक में संकलित करने की प्रक्रिया को "बूटस्ट्रैपिंग" कहा जाता है, जैसे कि "अपने बूटस्ट्रैप्स द्वारा खुद को ऊपर खींचना", जो कि एक मशीन से "बूटिंग" होता है। YouTube पर Computerphile के पास इस बारे में एक अच्छा वीडियो है और "T आरेख"
आयनो

क्या वह चिकन और अंडे की समस्या का भी जवाब देता है :)
स्काईनेट

@Skynet स्व-होस्टेड चिकन
sportzpikachu

65

से जावा डॉक्स

संकलक जावा में लिखा गया है और रनटाइम ANSI C में लिखा गया है


1
Sun माइक्रोसिस्टम्स द्वारा विकसित बहुत पहले जावा कंपाइलर C ++ में कुछ पुस्तकालयों का उपयोग करते हुए C ++ en.wikipedia.org/wiki/Java_compiler
राहुल गर्ग

4
यह वास्तव में एक पुराना दस्तावेज है (> चीजों की नज़र से 10 साल)। उदाहरण के लिए, यह कहता है कि "जावा बाइटकोड को देशी मशीन निर्देशों (व्याख्या) के लिए मक्खी पर अनुवादित किया जाता है और कहीं भी संग्रहीत नहीं किया जाता है" जो लगभग 5 वर्षों से सच नहीं है!
oxbow_lakes

2
खैर, जब से प्रलेखन वास्तव में अप-टू-डेट है, खासकर बड़े परिवर्तनों के बाद? :)
Esko

खैर - जवाब वास्तव में सही नहीं है; सूर्य JVM C में लिखा गया है, और जावा में Sun java संकलक लिखा गया है। पहले आईबीएम जेवीएम को स्मालटाक में लिखा गया था।
oxbow_lakes

8
जावा क्या संकलित करता है? जावा। वैसे, आपको जावा कैसे मिलता है? इसे संकलित करें। है ना?


9

इस लिंक को आपके प्रश्न का उत्तर देना चाहिए

ऐसा लगता है कि संकलक अब जावा में लिखा गया है, लेकिन रनटाइम ANSI C में लिखा गया है


8

सिद्धांत रूप में लगभग कुछ भी, आमतौर पर सी


3

Jikes RVM , एक स्वयं की मेजबानी JVM अनुसंधान प्रयोजनों के जावा में लिखा है के लिए बड़े पैमाने पर इस्तेमाल। यह उन लोगों के लिए नहीं है जो अपने डेस्कटॉप पर चलते हैं, लेकिन यह "मेरी भाषा की सामान्यता को दिखाते हैं" की सूची में है।


यह सभी तरह से नीचे कछुए है ? क्या इसमें किसी प्रकार का माइक्रोकर्नेल है? यदि हां, तो उस भाषा को किस भाषा में लिखा गया है?
राेडवल्ड

3

मान लें कि आप हॉटस्पॉट JVM के बारे में बात कर रहे हैं, जो कि सूर्य द्वारा प्रदान किया गया है, यह C ++ में लिखा गया है। जावा के लिए विभिन्न आभासी मशीनों के बारे में अधिक जानकारी के लिए, आप इस लिंक को देख सकते हैं । जावा में सबसे जावा कंपाइलर की तरह javac लिखा हुआ है।


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

(अधिक जानकारी के लिए आप इस लिंक को देख सकते हैं: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

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