Thread.java, लाइन 146 में, मैंने देखा है कि लेखक ने नाम क्षेत्र के लिए String
के बजाय char[]
का उपयोग किया था। क्या कोई प्रदर्शन कारण है जिसके बारे में मुझे पता नहीं है? getName()
नाम लौटने से पहले एक स्ट्रिंग में चरित्र को भी लपेटता है। क्या String
का उपयोग करना बेहतर नहीं है?स्ट्रिंग के बजाय char [] का उपयोग क्यों करें?
उत्तर
सामान्य रूप से, हाँ। मुझे संदेह है कि char[]
का उपयोग प्रदर्शन कारणों से Thread
में किया गया था, उन दिनों में जब जावा में ऐसी चीजों को सभ्य प्रदर्शन करने के लिए हर संभव प्रयास की आवश्यकता थी। आधुनिक जेवीएम के आगमन के साथ, ऐसे सूक्ष्म अनुकूलन लंबे समय से महत्वहीन बन गए हैं, लेकिन यह अभी तक इस तरह से छोड़ा गया है।
पुराने जावा 1.0-युग स्रोत में बहुत अजीब कोड है, मैं इस पर अधिक ध्यान नहीं देना चाहूंगा।
मुझे यह भी संदेह था। लेकिन फिर मैंने थ्रेड गोरुप में 'स्ट्रिंग नाम' देखा, मैं उलझन में था। जवाब के लिए धन्यवाद। –
मैं इस उत्तर को स्वीकार करने जा रहा हूं क्योंकि बहुत से लोगों ने सुझाव दिया कि वास्तव में कोई अच्छा कारण नहीं था। –
स्ट्रिंग अपरिवर्तनीय है इसलिए उसने इसका उपयोग क्यों किया। प्रभावी जावा 2end संस्करण का कहना है कि जोश ब्लच –
कहना मुश्किल है। शायद उनके मन में कुछ अनुकूलन थे, शायद इस कोड को लिखने वाले व्यक्ति को स्ट्रिंग के लिए सी-स्टाइल char*
सरणी के लिए अधिक उपयोग किया जाता था, या शायद इस कोड को लिखा गया था, तब तक यह सुनिश्चित नहीं था कि स्ट्रिंग्स अपरिवर्तनीय हों या नहीं। लेकिन इस कोड के साथ, किसी भी समय Thread.getName()
कहा जाता है, एक नया चार सरणी बनाई जाती है, इसलिए यह कोड वास्तव में एक स्ट्रिंग का उपयोग करने से जीसी पर भारी है।
+1 द्वारा "हमेशा संभव स्ट्रिंग विकल्प का उपयोग करें" यह जीसी के बारे में सच है। –
शायद कारण सुरक्षा सुरक्षा थी? स्ट्रिंग को प्रतिबिंब के साथ बदला जा सकता है, इसलिए लेखक पढ़ने और लिखने पर प्रतिलिपि बनाना चाहता है। यदि आप ऐसा कर रहे हैं, तो आप तेजी से प्रतिलिपि बनाने के लिए चार सरणी का भी उपयोग कर सकते हैं।
- 1. #defines के बजाय सी टाइपपीफ का उपयोग क्यों करें?
- 2. वापसी प्रकार में क्रॉस चार * के बजाय char * का उपयोग क्यों कर सकते हैं क्रैश?
- 3. कक्षा के नाम के बजाय var का उपयोग क्यों करें?
- 4. आप strcpy के बजाय strncpy का उपयोग क्यों करना चाहिए?
- 5. अन्य तरीकों के बजाय कर्ल का उपयोग क्यों करें?
- 6. रजिस्टर का उपयोग क्यों करें डिफ़ॉल्ट: setValue के बजाय: forKey :?
- 7. एस का उपयोग क्यों करें: एमएक्स के बजाय लाइन: एचआरयूएल?
- 8. क्यों नए के बजाय GWT.create() का उपयोग करें?
- 9. खरगोश एमक्यू के बजाय सेलरी का उपयोग क्यों करें?
- 10. jQuery के बजाय केकपीएचपी AJAX सहायक का उपयोग क्यों करें?
- 11. नींद() के बजाय चयन() का उपयोग क्यों करें?
- 12. सादा MySQL के बजाय ROLAP का उपयोग क्यों करें?
- 13. LINQ में FirstOrDefault के बजाय पहले का उपयोग क्यों करें?
- 14. क्यों बदले के बजाय EventArgs.Empty का उपयोग करें?
- 15. विज्ञापन के बजाय विकास प्रावधान का उपयोग क्यों नहीं करें?
- 16. क्या सिंगल-कैरेक्टर वैल्यू के लिए स्ट्रिंग के बजाय char का उपयोग करने का कोई फायदा है?
- 17. स्ट्रिंग^से char *
- 18. va_start में स्ट्रिंग का उपयोग कैसे करें?
- 19. char (char * नहीं) से std :: स्ट्रिंग
- 20. अंतिम चर के बजाय समान स्ट्रिंग अक्षर का उपयोग करना?
- 21. VARCHAR पर CHAR का उपयोग करने का कोई लाभ?
- 22. std :: स्ट्रिंग बनाम char *
- 23. बड़े थ्रेडपूल का उपयोग करने के बजाय एसिंक अनुरोधों का उपयोग क्यों करें?
- 24. char *
- 25. कार्यों के बजाय कन्स्ट्रक्टर का उपयोग क्यों किया जाता है?
- 26. स्ट्रिंग में एक char का सूचकांक खोजें?
- 27. NSAutoreleasePool का उपयोग क्यों करें?
- 28. स्ट्रिंगस्ट्रीम के बजाय स्ट्रिंग का उपयोग कब करना चाहिए?
- 29. एक char array के भाग को स्ट्रिंग
- 30. स्ट्रिंग के बजाय फ़ाइल.न्यू प्रतीकों के तर्क क्यों नहीं हैं?
स्ट्रिंग पर कॉल करें। {GetChars, getBytes, toLowerCase, ...} सभी नई ऑब्जेक्ट्स लौटाते हैं जो मूल स्ट्रिंग की प्रतियां हैं। यदि आप बड़े तारों के साथ काम करते हैं या इन तरीकों में से एक को कई बार बुलाते हैं। आप अनावश्यक अतिरिक्त कचरा संग्रह के साथ समाप्त हो सकता है। उदाहरण के लिए, एक HTTP दिल की धड़कन की कल्पना करें कि प्रत्येक बीट पर आउटपुटस्ट्रीम.write (epochTimeString.getBytes()) नामक किसी भी कारण से। यदि आप मोबाइल JVMs के साथ काम करते हैं तो आपको इन विवरणों के बारे में अधिक चिंता करना होगा। – eSniff