Oracle डेटाबेस JDBC ड्राइवर, 12 से पहले के संस्करण:
ड्राइवर प्रत्येक कॉलम के लिए fetchSize . में पंक्तियों की संख्या के गुणा के लिए अधिकतम आकार आवंटित करता है क्वेरी निष्पादित करने से पहले।
उदाहरण के लिए VARCHAR(4000) . के लिए कॉलम यह fetchSize . से 8k बाइट गुना आवंटित करेगा .
संस्करण 12 (और बाद में):
यह fetchSize . में लगभग 15 बाइट प्रति कॉलम प्रति पंक्ति आवंटित करता है क्वेरी निष्पादित करने से पहले। निष्पादन के बाद, संस्करण 12 में ड्राइवर वास्तविक पंक्ति डेटा को संग्रहीत करने के लिए केवल उतना ही आवंटित करता है जितना आवश्यक है।
परिणामस्वरूप, संस्करण 12 ड्राइवर आमतौर पर पुराने संस्करणों के ड्राइवरों की तुलना में काफी कम मेमोरी का उपयोग करते हैं।
आपका उदाहरण :
आपके उदाहरण में एक VARCHAR(20) 40 बाइट्स जितना बड़ा हो सकता है, एक NUMBER 22 बाइट्स जितना बड़ा हो सकता है और एक VARCHAR(100) 100 बाइट्स जितना बड़ा। fetchSize . के साथ 100 पर सेट करें पुराने ड्राइवर (40 + 22 + 100) * 100 = 16k आवंटित करेंगे . संस्करण 12 ड्राइवर आवंटित करेगा 3 * 15 * 100 = 4.5k . दोनों ड्राइवरों में अतिरिक्त ओवरहेड है जिसे मैं अनदेखा कर रहा हूं।