2011-11-21 11 views
9

Thread.java, लाइन 146 में, मैंने देखा है कि लेखक ने नाम क्षेत्र के लिए String के बजाय char[] का उपयोग किया था। क्या कोई प्रदर्शन कारण है जिसके बारे में मुझे पता नहीं है? getName() नाम लौटने से पहले एक स्ट्रिंग में चरित्र को भी लपेटता है। क्या String का उपयोग करना बेहतर नहीं है?स्ट्रिंग के बजाय char [] का उपयोग क्यों करें?

+3

स्ट्रिंग पर कॉल करें। {GetChars, getBytes, toLowerCase, ...} सभी नई ऑब्जेक्ट्स लौटाते हैं जो मूल स्ट्रिंग की प्रतियां हैं। यदि आप बड़े तारों के साथ काम करते हैं या इन तरीकों में से एक को कई बार बुलाते हैं। आप अनावश्यक अतिरिक्त कचरा संग्रह के साथ समाप्त हो सकता है। उदाहरण के लिए, एक HTTP दिल की धड़कन की कल्पना करें कि प्रत्येक बीट पर आउटपुटस्ट्रीम.write (epochTimeString.getBytes()) नामक किसी भी कारण से। यदि आप मोबाइल JVMs के साथ काम करते हैं तो आपको इन विवरणों के बारे में अधिक चिंता करना होगा। – eSniff

उत्तर

6

सामान्य रूप से, हाँ। मुझे संदेह है कि char[] का उपयोग प्रदर्शन कारणों से Thread में किया गया था, उन दिनों में जब जावा में ऐसी चीजों को सभ्य प्रदर्शन करने के लिए हर संभव प्रयास की आवश्यकता थी। आधुनिक जेवीएम के आगमन के साथ, ऐसे सूक्ष्म अनुकूलन लंबे समय से महत्वहीन बन गए हैं, लेकिन यह अभी तक इस तरह से छोड़ा गया है।

पुराने जावा 1.0-युग स्रोत में बहुत अजीब कोड है, मैं इस पर अधिक ध्यान नहीं देना चाहूंगा।

+0

मुझे यह भी संदेह था। लेकिन फिर मैंने थ्रेड गोरुप में 'स्ट्रिंग नाम' देखा, मैं उलझन में था। जवाब के लिए धन्यवाद। –

+0

मैं इस उत्तर को स्वीकार करने जा रहा हूं क्योंकि बहुत से लोगों ने सुझाव दिया कि वास्तव में कोई अच्छा कारण नहीं था। –

+0

स्ट्रिंग अपरिवर्तनीय है इसलिए उसने इसका उपयोग क्यों किया। प्रभावी जावा 2end संस्करण का कहना है कि जोश ब्लच –

2

कहना मुश्किल है। शायद उनके मन में कुछ अनुकूलन थे, शायद इस कोड को लिखने वाले व्यक्ति को स्ट्रिंग के लिए सी-स्टाइल char* सरणी के लिए अधिक उपयोग किया जाता था, या शायद इस कोड को लिखा गया था, तब तक यह सुनिश्चित नहीं था कि स्ट्रिंग्स अपरिवर्तनीय हों या नहीं। लेकिन इस कोड के साथ, किसी भी समय Thread.getName() कहा जाता है, एक नया चार सरणी बनाई जाती है, इसलिए यह कोड वास्तव में एक स्ट्रिंग का उपयोग करने से जीसी पर भारी है।

+0

+1 द्वारा "हमेशा संभव स्ट्रिंग विकल्प का उपयोग करें" यह जीसी के बारे में सच है। –

1

शायद कारण सुरक्षा सुरक्षा थी? स्ट्रिंग को प्रतिबिंब के साथ बदला जा सकता है, इसलिए लेखक पढ़ने और लिखने पर प्रतिलिपि बनाना चाहता है। यदि आप ऐसा कर रहे हैं, तो आप तेजी से प्रतिलिपि बनाने के लिए चार सरणी का भी उपयोग कर सकते हैं।

संबंधित मुद्दे