जावा / जेवीएम इंटर्नल को बंद करना [बंद]


15

मैंने लगभग 8 वर्षों के लिए जावा में प्रोग्राम किया है और मैं एक डेवलपर के रूप में भाषा को अच्छी तरह से जानता हूं, लेकिन मेरा लक्ष्य आंतरिक लोगों के बारे में अपने ज्ञान को गहरा करना है। मैंने पीएल डिजाइन में स्नातक पाठ्यक्रम लिया है, लेकिन वे बहुत व्यापक अकादमिक साक्षात्कार (स्कीम, IIRC) में थे।

क्या कोई ब्योरा देने के लिए मार्ग सुझा सकता है? विशेष रूप से, क्या विशेष विषय हैं (कहते हैं, कचरा संग्रह) जो अधिक स्वीकार्य हो सकता है या एक अच्छा प्रारंभिक बिंदु हो सकता है? क्या जेवीएम के आंतरिक और जावा प्रोग्रामिंग भाषा के डिजाइन पर एक उच्च स्तरीय पुस्तक है? मेरा वर्तमान दृष्टिकोण जेवीएम कल्पना और आवश्यकतानुसार अनुसंधान शुरू करने वाला है।


2
मेरा व्यक्तिगत दृष्टिकोण होगा (और है) कि सभी के लिए वास्तविक कारण खोजने के लिए थोड़ा "क्यों वास्तव में यह इस तरह के जावा में मामलों" काम करता है। ऑटो-बॉक्सिंग को कैसे परिभाषित किया जाता है, जेनेरिक प्रकार कैसे काम करते हैं। Var-args के बारे में क्या? SUPERवर्ग फ़ाइलों में ध्वज वास्तव में क्या करता है? इसका अधिकांश हिस्सा JVM कल्पना में वर्णित है, लेकिन इसे वहां से और अपने मस्तिष्क में बाहर निकालने के लिए कुछ काम करने की आवश्यकता है;;
जोकिम सौर

जवाबों:


13

जब मैंने जावा के साथ शुरुआत की थी, तो मैंने इसे थोड़ा सा किया था। मेरा दृष्टिकोण VM कल्पना को पढ़ने के लिए था , और javap -c के उत्पादन को देखने के लिए, जो एक वर्ग के डिसबेल्ड बायटेकोड को प्रदर्शित करता है। मैंने एक विशेष रूप से बाईटेकोड के साथ जावा कक्षाएं बनाने की भी कोशिश की, एक जावा बायटेकोड असेंबलर का उपयोग करके। यदि आप कोशिश करना चाहते हैं कि जैस्मीन नामक एक कोडांतरक है।

आप लैंबडा एक्सप्रेशन ट्रांसलेशन डॉक्यूमेंट को देखना चाहते हैं , जिसे ओरेकल के ब्रायन गोएट्ज़ ने पोस्ट किया है, जो उस रणनीति को कवर करता है, जिसका इस्तेमाल लैम्ब्डा (क्लोज़र, अनिवार्य रूप से) में किया जाएगा, जो कि जावा 8 में जोड़ा जा रहा है।

आप OpenJDK से हॉटस्पॉट VM के लिए स्रोत कोड , और JDK 8 के लिए लैम्ब्डा सपोर्ट (hg रिपॉजिटरी) के साथ javac कंपाइलर के शुरुआती एक्सेस संस्करण को प्राप्त कर सकते हैं , अगर आपको वास्तव में पूल के गहरे अंत में गोताखोरी करने का मन करता है।

कचरा संग्रह में देखना शायद एक अच्छा विचार है। एक त्वरित खोज ने जावा के कचरा-प्रथम जीसी पर इस डॉ। डॉब्स लेख को बदल दिया । मुझे नहीं पता कि यह एक अच्छा परिचय है। मुझे लगता है कि आप पहले से ही मार्क-एंड-स्वीप और जेनरल कचरा कलेक्टरों के बारे में जानते हैं; यदि नहीं, तो आप पहले उन पर पढ़ना चाहेंगे।


3

कुछ अतिरिक्त विचार:

  • OpenJDK प्रोजेक्ट में शामिल हों । इस पर हैक करके कुछ सॉफ्टवेयर के इंटर्नल को समझने से कुछ नहीं होता है!
  • देखिए कि कैसे JVM के लिए अन्य JVM भाषाएँ (जैसे Clojure या Scala) कोड उत्पन्न करती हैं
  • एक मिनी-प्रोजेक्ट करें जो आपके हित में हो और जेवीएम इंटर्नल के उपयोग की आवश्यकता हो। शायद ASM की तरह कुछ का उपयोग करके bytecode हेरफेर करने के लिए ..

2

यदि आप जावा बाइटकोड प्रारूप से अभी तक परिचित नहीं हैं, तो एक छोटे संकलक को लिखने पर विचार करें जो वैध जावा बाइट कोड (या जैस्मीन असेंबलर) बनाता है और इसे सही ढंग से चलाता है।

आपके कोड द्वारा उत्पन्न "हैलो वर्ल्ड" या "4" (दिए गए 2 + 2) को देखकर बहुत संतोष होता है।


1

बाकी सभी ने जो कहा है, इसके अलावा, जावा प्रदर्शन ट्यूनिंग पृष्ठ देखें। इसमें कचरा संग्रहण और सामान्य रूप से प्रदर्शन ट्यूनिंग पर बहुत सारे लेख हैं। इसमें प्रदर्शन ट्यूनिंग पुस्तकों की एक सूची भी शामिल है जो आपके लिए भी दिलचस्प हो सकती है।

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