मेरे पास जावा में एक ऑब्जेक्ट है जिसमें एक स्ट्रिंग है। मैं उत्सुक हूं कि स्ट्रिंग का मेमोरी उपयोग कैसे काम करता है। मैं अपने कार्यक्रम के लिए मेमोरी उपयोग को अनुकूलित करने की कोशिश कर रहा हूं और एप्लिकेशन में लगभग 10000 ऐसी ऑब्जेक्ट्स होंगी। एक स्ट्रिंग के लिए जैसे "हैलो वर्ल्ड" मेमोरी उपयोग क्या होगा?जावा में स्ट्रिंग का मेमोरी उपयोग
उत्तर
जावा प्रति वर्ण दो बाइट्स * का उपयोग करता है, इसलिए आपको किसी न किसी अनुमान के लिए पात्रों की संख्या को गुणा करने की आवश्यकता होगी। "पेलोड" के भंडारण के अतिरिक्त, आपको अपनी स्ट्रिंग के संदर्भ में आवंटित स्थान के लिए खाते की आवश्यकता होगी, जो आमतौर पर आपके लक्षित आर्किटेक्चर पर एक सूचक के आकार के बराबर होती है, स्ट्रिंग की लंबाई के लिए स्थान, जो एक int
है, और कैश हैश कोड के लिए जगह है, जो एक और int
है।
चूंकि, "Hello World"
11 वर्ण लंबा है, तो मैं इसका आकार 32-बिट पॉइंटर्स वाले कंप्यूटर पर 2 * 11 + 4 + 4 + 4 = 34 बाइट्स के रूप में अनुमानित करता हूं, या 2 * 11 + 8 + 4 + 4 = 38 64-बिट पॉइंटर्स वाले कंप्यूटर पर बाइट्स।
नोट: यह अनुमान आंतरिक स्ट्रिंग स्थिरांक के प्रभावों पर विचार नहीं करता है। जब एक स्ट्रिंग interned है, तो आंतरिक स्ट्रिंग के सभी संदर्भ समान पेलोड साझा करते हैं, इसलिए एक आंतरिक स्ट्रिंग के अतिरिक्त उदाहरण प्रति अतिरिक्त अतिरिक्त संदर्भ संदर्भ का आकार होता है (यानी लक्ष्य आर्किटेक्चर पर सूचक आकार)।
*
-XX:+UseCompressedStrings
विकल्प का उपयोग तब तक किया जाता है, जिस स्थिति में स्ट्रिंग्स को यूटीएफ -16 यूटीएफ -8 एन्कोडिंग की आवश्यकता नहीं होती है।
आंतरिक तारों (String.intern) और उनके लिए पूल के बारे में मत भूलना। मैं 'स्ट्रिंग एस =" हाय "घोषित कर सकता हूं; 'प्रत्येक कक्षा में, लेकिन यह सभी मामलों में साझा किया जाएगा, इसलिए यह एक्स उदाहरण समय s.length() नहीं है। यह मोटे तौर पर 4 + उदाहरण सूचक आकार * उदाहरण है। – MadConan
@MadConan यह एक उचित अवलोकन है, टिप्पणी के लिए धन्यवाद! – dasblinkenlight
- 1. जावा में मेमोरी उपयोग ढूँढना
- 2. जेपीआरओफ़ाइलर का उपयोग कर जावा में मेमोरी लीक कैसे खोजें?
- 3. जावा में Serializable, क्लोनेबल और मेमोरी उपयोग
- 4. जावा 6 अत्यधिक मेमोरी उपयोग
- 5. जावा में थ्रेड या प्रक्रिया का मेमोरी उपयोग
- 6. मेमोरी JNI का उपयोग कर रिसाव जावा कोड
- 7. जावा स्ट्रिंग ऑब्जेक्ट्स मेमोरी में कैसे संभालता है?
- 8. जावा में <स्ट्रिंग, स्ट्रिंग []> का स्ट्रिंग प्रस्तुति प्राप्त करने का आसान तरीका जावा में?
- 9. लिनक्स के तहत जावा से वर्चुअल मेमोरी उपयोग, बहुत मेमोरी
- 10. जावा इन-मेमोरी संकलन
- 11. जावा में मेमोरी लीक ImageIO.read()
- 12. असाइनमेंट ऑपरेटर जावा में मेमोरी का उपभोग करता है?
- 13. पायथन में शब्दकोश का मेमोरी-उपयोग?
- 14. जावा मेमोरी उपयोग की निगरानी कैसे करें?
- 15. जावा में, स्ट्रिंग एस = नया स्ट्रिंग() कोई भी उपयोग है?
- 16. जावा जावा में कितनी मेमोरी buffered छवि का उपयोग करें जांचें?
- 17. हैशटेबल कितनी मेमोरी का उपयोग करता है?
- 18. सी ++ स्ट्रिंग मेमोरी प्रबंधन
- 19. मेमोरी स्ट्रीम से स्ट्रिंग
- 20. जावा वेब एप्लिकेशन में मेमोरी लीक
- 21. डॉकर कंटेनर का मेमोरी उपयोग
- 22. रेल ऐप में मेमोरी लीक ... स्ट्रिंग दुःस्वप्न
- 23. जावा में बी-ट्री के मेमोरी उपयोग की गणना
- 24. सी #: किसी ऑब्जेक्ट का मेमोरी उपयोग
- 25. जावा: मेमोरी कुशल ByteArrayOutputStream
- 26. जावा मेमोरी लीक
- 27. मेमोरी मैप फ़ाइल जावा
- 28. जावा स्ट्रिंग में सुपरस्क्रिप्ट
- 29. मैं जावा में सीपीयू और मेमोरी उपयोग कैसे जांचूं?
- 30. स्ट्रिंग ... जावा में पैरामीटर
http://stackoverflow.com/questions/9699071/what-is-the-javas-internal-represention-for-string-modified-utf-8-utf-16 – jdevelop
"हैलो वर्ल्ड" के लिए स्मृति उपयोग है एन्कोडिंग के आधार पर शायद 11 या 22 बाइट्स। हालांकि, यदि आपके पास कई स्थानों पर एक ही स्ट्रिंग है तो वे एक ही वस्तु हो सकती हैं और आप केवल संदर्भ के लिए स्मृति खर्च करते हैं। – Cruncher
@ क्रंचर: जावा में "एन्कोडिंग के आधार पर" कोई नहीं है। आंतरिक रूप से सभी जावा स्ट्रिंग ऑब्जेक्ट्स को यूटीएफ -16 (या उसके कुछ संस्करण) के रूप में संग्रहीत किया जाता है। –