यह जिज्ञासा से सिर्फ एक साधारण सैद्धांतिक प्रश्न है। मैं हमेशा एक जावा प्रशंसक लड़का की तरह रहा हूं। लेकिन एक बात मुझे आश्चर्यचकित करती है कि क्यों जावा ढेर पर वस्तुओं को बनाने के लिए तंत्र प्रदान नहीं करता है? अगर मैं सी # पर संरचना बनाने की तरह ही ढेर के बजाय ढेर पर छोटे बिंदु (int x, int y) ऑब्जेक्ट बना सकता हूं तो यह अधिक कुशल नहीं होगा। क्या जावा में इस प्रतिबंध के पीछे कोई विशेष सुरक्षा कारण है? :)जावा में स्टैक मेमोरी पर ऑब्जेक्ट्स बनाना?
उत्तर
यहां रणनीति यह है कि भाषा में इस निर्णय को लीक करने के बजाय जावा जावा को जेवीएम/हॉटस्पॉट/जेआईटी/रनटाइम तय करता है कि यह कहां और कैसे स्मृति आवंटित करना चाहता है।
"बचने के विश्लेषण" का उपयोग करने के लिए अनुसंधान चल रहा है यह जानने के लिए कि वास्तव में वस्तुओं को ढेर और ढेर पर जाने की आवश्यकता नहीं है-बजाय उन्हें आवंटित करें। मुझे यकीन नहीं है कि क्या यह पहले से ही मुख्यधारा JVM में बना है। लेकिन अगर ऐसा होता है, तो इसे रनटाइम (चीज़ -XX: कुछ) द्वारा नियंत्रित किया जाएगा, डेवलपर नहीं।
इसका उछाल यह है कि पुराना कोड इन भविष्य के संवर्द्धन से भी अपडेट किए बिना लाभ उठा सकता है।
यदि आप इसे मैन्युअल रूप से प्रबंधित करना चाहते हैं (लेकिन अभी भी कंपाइलर जांच है कि यह "सुरक्षित" रहता है), जंग पर एक नज़र डालें।
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html सक्षम 6u23 में और बाद में – jtahlborn
@jtahlborn: +1। मुझे लगता है कि अनुकूलन की वर्तमान फसल वास्तव में ढेर पर वस्तुओं को आवंटित करने तक नहीं जाती है, हालांकि। रिलीज नोट्स से, यह ताले और मौजूदा वस्तुओं की अनावश्यक प्रतियों को खत्म करने जैसा लगता है। लिंक jtahlborn लिंक से – Thilo
+1 पोस्ट किया गया: "यह गैर-वैश्विक रूप से भागने वाली वस्तुओं के लिए एक ढेर आवंटन के साथ एक ढेर आवंटन को प्रतिस्थापित नहीं करता है।" जिसका अर्थ है कि * ArgEscape * और * NoEscape * को स्टैक पर आवंटित किया जाएगा। लेकिन फिर, यह स्पष्ट रूप से उल्लेख नहीं किया जा रहा है ... – alfasin
स्टैक पर बनाए गए ऑब्जेक्ट के साथ कुछ वैश्विक संदर्भ आरंभ करना एक आम समस्या होगी। जब ऑब्जेक्ट बनाया गया तरीका निकलता है तो आप क्या इंगित करते हैं?
कहा जा रहा है कि जावा में स्टैक पर ऑब्जेक्ट बनाया गया है, यह escape analysis का उपयोग करके आपकी पीठ के पीछे किया जा रहा है जो सुनिश्चित करता है कि उपर्युक्त परिदृश्य नहीं होता है।
यह अंतरिम रूप से जावा के लिए आ रहे हैं, वहाँ कोई वास्तविक ईटीए इस के लिए सेट किया गया है ताकि आप केवल आशा कर सकता है यह जावा से 10 से आ जाएगा
प्रस्ताव मूल्य प्रकार कहा जाता है और आप इसे in the mailing list of Project Valhalla पालन कर सकते हैं।
मुझे नहीं पता कि पहले किसी भी भाषा में क्यों नहीं था, शायद मूल रूप से इसे अनावृत माना जाता था या इसे लागू करने के लिए कोई समय नहीं था।
ठीक है! जावा "तात्कालिक रूप से" सी # तक पकड़ जाएगा? "कभी-कभी" (टीएम) – csauve
@skiwi क्या आप कृपया संक्षेप में बता सकते हैं कि मूल्य प्रकार क्या हैं? –
- 1. स्टैक बनाम ढेर पर जावा मेमोरी आवंटन
- 2. सी ++ में स्टैक पर बेनामी ऑब्जेक्ट्स?
- 3. .NET स्टैक मेमोरी सीमा
- 4. == जावा में ऑब्जेक्ट्स पर ऑपरेटर
- 5. जावास्क्रिप्ट में नए ऑब्जेक्ट्स बनाना
- 6. स्केल पर थ्रेड-स्थानीय ऑब्जेक्ट्स बनाना
- 7. जावा स्ट्रिंग ऑब्जेक्ट्स मेमोरी में कैसे संभालता है?
- 8. मेमोरी लेआउट सी ++ ऑब्जेक्ट्स
- 9. ट्रैक (स्टैक-आवंटित) ऑब्जेक्ट्स का ट्रैक रखना
- 10. ASP.NET में स्टेटिक ऑब्जेक्ट्स मेमोरी का अपशिष्ट?
- 11. PHP ऑब्जेक्ट्स जो मेमोरी में रहते हैं
- 12. सी ++ रिटर्न संदर्भ/स्टैक मेमोरी
- 13. जावा: स्टैक
- 14. जावा - कुंजी/मूल्य जोड़े के साथ ऑब्जेक्ट्स बनाना?
- 15. जावा में ग्रिड बनाना
- 16. विभिन्न जावा ऑब्जेक्ट्स द्वारा स्मृति मेमोरी खपत की निगरानी
- 17. ऑब्जेक्ट्स बनाना एक इनपुट फ़ाइल
- 18. सी ++ वेक्टर, ऑब्जेक्ट्स, फ्री मेमोरी
- 19. मेमोरी बफर से HBITMAP बनाना
- 20. स्टैक अनविंडिंग समस्या पर जावा और सी ++
- 21. स्ट्रिंग ऑब्जेक्ट्स के लिए मेमोरी आवंटन?
- 22. जावा सेविंग/ओपनिंग फाइल ऑब्जेक्ट्स
- 23. जावा में स्ट्रिंग का मेमोरी उपयोग
- 24. जावा ऑब्जेक्ट्स जावा कोड में सीरियलाइज़ करें
- 25. जावा में कितनी स्ट्रिंग ऑब्जेक्ट्स?
- 26. जावा एक्सपैथ मेमोरी रिसाव?
- 27. संगत मेमोरी में जावा ऑब्जेक्ट्स स्टोर करने की कोशिश कर रहा है
- 28. प्रोग्राम ऑब्जेक्ट्स द्वारा जावा ऑब्जेक्ट पर कब्जा कर लिया गया स्मृति की गणना करें जिसमें ऑब्जेक्ट्स
- 29. जावा स्टैक निशान
- 30. जावा में मेमोरी उपयोग ढूँढना
क्या होता है जब आप इसे एक कंटेनर में डालते हैं जो ढेर पर नहीं है? जब आप वापस आते हैं, तो कंटेनर में अब विलुप्त स्मृति का संदर्भ है। – Max
@ मैक्स: संभवतः, भाषा को उन संरचनाओं को भी शामिल करने की आवश्यकता होगी जो संकलक को इसके खिलाफ जांचने की अनुमति देते हैं। – Thilo
@ मैक्स: कंटेनर के पास मूल का संदर्भ नहीं है, या तो इसकी एक प्रति है या इसकी एक बॉक्स की प्रति है। .NET/C# पिछले 15 वर्षों से यह रहा है। https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx – csauve