मैं 128 एमबी (-Xmx128M) के अधिकतम ढेर आकार के साथ जावा एप्लिकेशन चला रहा हूं। यह आउटऑफमेमरी एरर, या किसी अन्य अनचाहे अपवाद के साथ सफल समापन के लिए चल रहा है। इसलिए, मुझे लगता है कि इसका वास्तविक ढेर आकार 128 एमबी की घोषित सीमा के भीतर रहा था।मेरा जेवीएम का कुल मेमोरी उपयोग एक्सएमएक्स मूल्य से 30 गुना अधिक क्यों है?
हालांकि, इस जावा एप्लिकेशन के लिए प्रक्रिया को देखते समय, मैं 4,188,548 केबी (~ 4 जीबी) की कुल मेमोरी उपयोग देख रहा हूं। यह ढेर के नियंत्रित अधिकतम आकार 30 गुना से अधिक की वृद्धि है। हालांकि मैं समझता हूं कि इस मान में वर्चुअल मेमोरी आवंटित है जो वास्तविक भौतिक स्मृति से काफी अधिक हो सकती है, यह सूर्य ग्रिड इंजन द्वारा लगाए गए कठोर सीमाओं को प्रभावित करती है, और इसलिए यह सार्थक है।
यह वास्तव में कितना संभव है? मैं समझता हूं कि जेवीएम द्वारा खपत कुल स्मृति में ढेर के आकार की तुलना में काफी कुछ शामिल है, लेकिन मुझे समझ में नहीं आता है कि एप्लिकेशन को वास्तव में अपनी ऑब्जेक्ट्स बनाने और इसकी गणना करने की आवश्यकता के अलावा कई जीबी अतिरिक्त मेमोरी की आवश्यकता कैसे हो सकती है ।
मैं 64-बिट आरएचईएल लिनक्स वितरण पर सूर्य जावा 1.6.0.31 का उपयोग कर रहा हूं।
क्या आप 'नए थ्रेड() 'की एक असंबद्ध संख्या बना रहे हैं? आपके द्वारा उत्पन्न प्रत्येक देशी धागे में स्मृति की ढेर होती है जो जावा ढेर का हिस्सा नहीं है। – Affe
मेमोरी उपयोग किस उपाय से? आवंटित पता स्थान जिसमें उसमें कोई वास्तविक सामग्री मैप नहीं है, शायद वह नहीं है जिसे आप परवाह करते हैं; सुनिश्चित करें कि आप आरएसएस को माप रहे हैं, वीआईआरटी नहीं। –
@Affe यह एक थ्रेडिंग मुद्दा नहीं है। आवेदन एकल थ्रेडेड है। कुल स्मृति उपयोग को मापने के लिए – jjcarver