तो फिर क्या होगा यदि प्रसंस्करण को एकाधिक फ़ाइलों और एकाधिक बफर के डेटा में चारों ओर कूदने की आवश्यकता है? क्या लगातार खुलने और द्विआधारी फाइलों का बंद होना महंगा हो रहा है?
मैं के एक बड़े प्रशंसक 'स्मृति मैप की आई/ओ' कर रहा हूँ, उर्फ 'प्रत्यक्ष बाइट बफ़र्स'। जावा में उन्हें Mapped Byte Buffers कहा जाता है java.nio का हिस्सा हैं। (असल में, यह तंत्र ओएस की वर्चुअल मेमोरी पेजिंग सिस्टम का उपयोग आपकी फाइलों को 'मैप' करने के लिए करता है और उन्हें प्रोग्रामेटिक रूप से बाइट बफर के रूप में पेश करता है। ओएस बाइट्स को डिस्क से और मेमोरी ऑटो-जादुई और बहुत तेज़ी से ले जाने का प्रबंधन करेगा।
मैं इस दृष्टिकोण का सुझाव देता हूं क्योंकि ए) यह मेरे लिए काम करता है, और बी) यह आपको अपने एल्गोरिदम पर ध्यान केंद्रित करने देगा और प्रदर्शन अनुकूलन के साथ जेवीएम, ओएस और हार्डवेयर को सौदा करने देगा। सभी अक्सर, वे जानते हैं कि हमारे पास कम प्रोग्रामर की तुलना में सबसे अच्छा क्या है। ;)
आप अपने संदर्भ में एमबीबी का उपयोग कैसे करेंगे? बस अपनी प्रत्येक फाइल के लिए एमबीबी बनाएं और फिट बैठे हुए उन्हें पढ़ें। आपको केवल अपने परिणामों को स्टोर करने की आवश्यकता होगी। ।
बीटीडब्ल्यू: जीबी में आप कितना डेटा से निपट रहे हैं?यदि यह 3-4 जीबी से अधिक है, तो यह 32-बिट मशीन पर आपके लिए काम नहीं करेगा क्योंकि एमबीबी कार्यान्वयन प्लेटफार्म आर्किटेक्चर द्वारा एड्रेस करने योग्य मेमोरी स्पेस पर प्रतिवादी है। एक 64-बिट मशीन & ओएस आपको मैपटेबल डेटा के 1TB या 128TB पर ले जाएगा।
आप प्रदर्शन के बारे में सोच रहे हैं, तो किर्क Pepperdine पता वह एक वेबसाइट, www.JavaPerformanceTuning.com, कुछ और MBB विवरण होता है कि उस के साथ शामिल है (कुछ हद तक एक प्रसिद्ध जावा प्रदर्शन गुरु।): NIO Performance Tips और अन्य जावा प्रदर्शन संबंधित चीजें।
स्रोत
2008-09-18 13:59:08
@ जेक: मैंने टेक्स्ट फाइलों के जावा एप्लिकेशन प्रसंस्करण गीगाबाइट्स (ASCII, UTF-8 और UTF-16 {be, le} दोनों) लिखा था। * * जिस चीज ने अंतर बनाया: निर्माता/उपभोक्ता योजना में स्विच करना और कई कोरों पर लोड फैलाना (मशीन को अपनाना)। हमारे पास एक धागा आई/ओ कर रहा है, जो उपभोग करने के लिए "भाग" का उत्पादन करता है। तब हमारे पास डेटा को संसाधित करने के समानांतर में काम करने वाले कई धागे हैं। 16-कोर मशीन पर एक सीपीयू मॉनीटर का उपयोग करके काम पर देखना आश्चर्यजनक है :) तो मूल रूप से आपको यह पता लगाना होगा कि आप कहां बाध्य हैं: क्या आप I/O बाध्य हैं या CPU बाध्य हैं? यदि आप सीपीयू बाध्य हैं, तो मेरी टिप समानांतर है। – SyntaxT3rr0r