आपके सहकर्मी को पता नहीं है कि वे किस बारे में बात कर रहे हैं।
आपका सबसे महंगा ऑपरेशन उन्हें सुन रहा होगा । उन्होंने आपका समय बर्बाद करने के लिए आपको गलत जानकारी दी है, जो एक दशक से अधिक की है (मूल तिथि के अनुसार यह उत्तर पोस्ट किया गया था) और साथ ही आपको यहाँ पोस्ट करने और सच्चाई के लिए इंटरनेट पर शोध करने में समय बिताना पड़ा ।
उम्मीद है कि वे केवल एक दशक से अधिक समय से अनजाने में कुछ सुनाई या पढ़ रहे हैं और किसी भी बेहतर को नहीं जानते हैं। मैं और कुछ भी कहूंगा, जैसा कि वे कहते हैं कि यह संदिग्ध है, यह किसी भी तरह से एक ज्ञात गिरावट होनी चाहिए जो किसी भी तरह से अद्यतित रहती है।
सब कुछ एक वस्तु है (को छोड़कर primitives
)
आदिम ( int, long, double
, आदि) के अलावा सभी चीजें जावा में ऑब्जेक्ट हैं। जावा में ऑब्जेक्ट निर्माण से बचने का कोई तरीका नहीं है।
अपनी मेमोरी आवंटन रणनीतियों के कारण जावा में ऑब्जेक्ट निर्माण ज्यादातर मामलों में C ++ से तेज है और JVM में बाकी सभी चीजों की तुलना में सभी व्यावहारिक उद्देश्यों के लिए "मुक्त" माना जा सकता है ।
1990 की शुरुआत में 2000 के दशक के प्रारंभ में जेवीएम कार्यान्वयन ने वस्तुओं के वास्तविक आवंटन में कुछ प्रदर्शन किया था। यह कम से कम 2005 के बाद से ऐसा नहीं है।
यदि आप -Xms
अपने एप्लिकेशन को सही ढंग से चलाने के लिए आवश्यक सभी मेमोरी का समर्थन करने के लिए ट्यून करते हैं, तो जीसी को कभी भी चलाने और आधुनिक जीसी कार्यान्वयन में अधिकांश कचरे को स्वीप करने की आवश्यकता नहीं हो सकती है, अल्पकालिक कार्यक्रम कभी भी जीसी कभी नहीं हो सकते हैं।
यह कोशिश नहीं करता है और मुक्त स्थान को अधिकतम करता है, जो वैसे भी एक लाल हेरिंग है, यह रनटाइम के प्रदर्शन को अधिकतम करता है। अगर इसका मतलब है कि JVM हीप हर समय लगभग 100% आवंटित किया जाता है, तो ऐसा ही हो। JVM हीप मेमोरी आपको वैसे भी वहां बैठने के लिए कुछ भी नहीं देती है।
एक गलत धारणा है कि जीसी मेमोरी को एक उपयोगी तरीके से बाकी सिस्टम में वापस कर देगा, यह पूरी तरह से गलत है!
JVM ढेर हो जाना और इतने हटना है कि प्रणाली के बाकी हिस्सों सकारात्मक मुक्त स्मृति से प्रभावित होता है नहीं है JVM ढेर में । -Xms
स्टार्टअप में निर्दिष्ट सभी को आवंटित करता है और इसका अनुमान कभी भी उस मेमोरी को ओएस पर वापस जारी करने के लिए किसी भी अन्य ओएस प्रक्रियाओं के साथ साझा नहीं किया जाता है जब तक कि जेवीएम का उदाहरण पूरी तरह से समाप्त नहीं हो जाता। -Xms=1GB -Xmx=1GB
किसी भी समय वास्तव में कितने ऑब्जेक्ट बनाए जाते हैं, इसकी परवाह किए बिना 1GB RAM आवंटित करता है। कुछ सेटिंग्स हैं जो ढेर मेमोरी के प्रतिशत को जारी करने की अनुमति देती हैं, लेकिन सभी व्यावहारिक उद्देश्यों के लिए जेवीएम कभी भी इस मेमोरी को पर्याप्त रूप से जारी करने में सक्षम नहीं होता है।इसलिए कोई अन्य प्रक्रिया इस मेमोरी को पुनः प्राप्त नहीं कर सकती है, इसलिए जेवीएम हीप के मुक्त होने से बाकी सिस्टम को कोई लाभ नहीं होता है। इसके लिए एक RFE 29-NOV-2006 को "स्वीकार" किया गया था , लेकिन इसके बारे में कभी कुछ नहीं किया गया। यह व्यवहार अधिकार के किसी भी व्यक्ति द्वारा एक चिंता नहीं माना जाता है।
एक गलत धारणा है कि कई छोटी छोटी जीवित वस्तुओं को बनाने से जेवीएम लंबे समय तक रुकने का कारण बनता है, यह अब अच्छी तरह से गलत है
वर्तमान जीसी एल्गोरिदम वास्तव में कई छोटी वस्तुओं को बनाने के लिए अनुकूलित हैं जो अल्पकालिक हैं, जो कि मूल रूप से हर कार्यक्रम में जावा वस्तुओं के लिए 99% अनुमानी है। ऑब्जेक्ट पूलिंग के प्रयास वास्तव में ज्यादातर मामलों में JVM का प्रदर्शन खराब कर देंगे।
आज जिन वस्तुओं की पूलिंग की आवश्यकता है, वे ऑब्जेक्ट्स हैं जो परिमित संसाधनों को संदर्भित करते हैं जो JVM के लिए बाहरी हैं ; सॉकेट्स, फ़ाइलें, डेटाबेस कनेक्शन, आदि और पुन: उपयोग किया जा सकता है। नियमित वस्तुओं को उसी अर्थ में संजोया नहीं जा सकता है जैसा कि उन भाषाओं में है जो आपको स्मृति स्थानों तक सीधी पहुंच की अनुमति देती हैं। ऑब्जेक्ट कैशिंग एक अलग अवधारणा है और हो सकता है कि कुछ लोग भोलेपन से पूलिंग कहते हैं या नहीं , दो अवधारणाएं एक ही चीज नहीं हैं और उन्हें भ्रमित नहीं किया जाना चाहिए।
आधुनिक जीसी एल्गोरिदम में यह समस्या नहीं है क्योंकि वे एक अनुसूची पर नहीं आते हैं, वे निपटाते हैं जब एक निश्चित पीढ़ी में मुफ्त मेमोरी की आवश्यकता होती है। यदि ढेर पर्याप्त बड़ा है, तो किसी भी ठहराव के कारण लंबे समय तक कोई सौदा नहीं होता है।
ऑब्जेक्ट ओरिएंटेड डायनेमिक भाषाएं संवेदनशील संवेदनशील परीक्षणों पर अब भी दिनों सी की पिटाई कर रही हैं।