मैं विस्फोटों में लॉग इन करने और डेटा पथ को अनुकूलित करने के लिए बहुत सी चीजें लिख रहा हूं। मैं StringBuilder
के साथ लॉग टेक्स्ट का निर्माण करता हूं। सबसे कुशल प्रारंभिक क्षमता, स्मृति प्रबंधन के अनुसार क्या होगा, तो यह JVM के बावजूद अच्छी तरह से काम करेगा? लक्ष्य लगभग हमेशा पुनर्वितरण से बचने के लिए है, जिसे लगभग 80-100 की प्रारंभिक क्षमता से ढंकना चाहिए। लेकिन मैं जितना संभव हो उतना बाइट बर्बाद करना चाहता हूं, क्योंकि स्ट्रिंगबिल्डर उदाहरण बफर में चारों ओर लटका सकता है और बर्बाद बाइट फसल हो सकता है।स्ट्रिंगबिल्डर के लिए सबसे कुशल प्रारंभिक क्षमता आकार?
मुझे एहसास है कि यह जेवीएम पर निर्भर करता है, लेकिन कुछ मूल्य होना चाहिए, जो कम से कम बाइट्स को बर्बाद कर देगा, इससे कोई फर्क नहीं पड़ता कि जेवीएम, "कम से कम आम संप्रदाय" का प्रकार है। मैं वर्तमान में 128-16
का उपयोग कर रहा हूं, जहां 128 एक अच्छा दौर संख्या है, और घटाव आवंटन ओवरहेड के लिए है। इसके अलावा, इसे "समयपूर्व अनुकूलन" का मामला माना जा सकता है, लेकिन चूंकि मैं बाद में उत्तर "नियम-का-अंगूठे" नंबर हूं, यह जानकर कि यह भविष्य में भी उपयोगी होगा।
मुझे "मेरे सबसे अच्छे अनुमान" उत्तरों की उम्मीद नहीं है (मेरा स्वयं का उत्तर पहले से ही है), मुझे उम्मीद है कि किसी ने पहले से ही इसका शोध किया है और ज्ञान आधारित उत्तर साझा कर सकता है।
इस प्रश्न का उत्तर बहुत सारी चीजों पर निर्भर करता है, उदाहरण के लिए पाठ को 'स्ट्रिंगबिल्डर' में संग्रहीत करना कितना समय है। पता लगाने का एकमात्र तरीका स्मृति और/या CPU प्रोफाइलर का उपयोग करके मापना है। कुछ बाइट्स के बारे में चिंता करने का कोई कारण नहीं है जब तक कि आप सैकड़ों हजारों 'स्ट्रिंगबिल्डर' ऑब्जेक्ट्स बना रहे हों। – Jesper
अब तक का सबसे बड़ा ओवरहेड आईओ की लागत है। जब तक आप इस डेटा को आईओ को लिखना नहीं चाहते हैं, तो मैं इसके बारे में चिंता नहीं करता। –