2010-08-27 15 views
13

सिस्टम टेस्ट में हाल ही में तैनाती के बाद, हमारे सर्लेट्स में से एक सामान्य से अधिक कठिन हो रहा था और हमने देखा कि स्मृति शुरू हो रही है और वेबलॉगिक अंततः मर जाएगा। मेरा इंटर्न, मुझे बहुत गर्व था, स्मृति रिसाव के स्रोत की खोज की।JAXBContext.new इंस्टेंस मेमोरी लीक

जब भी एक अनुरोध में आता है, इस लाइन कहा जाता हो जाता है:

JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”); 

किसी कारण से, वस्तु कचरा एकत्र हो जाता है कभी नहीं। एक बार जब हम इसे स्थिर बनाते हैं और स्थानांतरित करते हैं जहां हमने इसे प्रारंभ किया, तो हमारी स्मृति रिसाव चली गई।

हमारे डेवलपर्स में से एक ने स्टैंडअलोन जावा एप्लिकेशन में थोड़ी देर के लूप में बस उस पंक्ति को रखा और स्मृति को ऊपर और ऊपर देखा।

क्या किसी के पास कोई विचार है कि उस वस्तु को कचरा क्यों नहीं मिला है?

धन्यवाद

उत्तर

8

कौन सा कार्यान्वयन & JAXB के संस्करण का उपयोग कर रहे हैं? यदि आप जावा एसई 6 के साथ आने वाले संदर्भ कार्यान्वयन का उपयोग कर रहे हैं, तो यह मेट्रो (https://jaxb.dev.java.net/) है।

आप MOXY कार्यान्वयन (http://www.eclipse.org/eclipselink/moxy.php) का उपयोग किया जाना है तो मैं डिबग मदद कर सकते हैं तो:

यहाँ वहाँ स्मृति संबंधित कीड़े से कुछ हैं।

अच्छी खबर यह है कि JAXBContext थ्रेड-सुरक्षित है और इसे केवल एक बार बनाया जाना चाहिए और फिर से उपयोग किया जाना चाहिए। JAXBContext का पुन: उपयोग करना भी आपकी स्मृति रिसाव को हल कर रहा है।

अधिक जानकारी के लिए देखें:

+2

लिंक अद्यतन: http://jaxb.java.net/guide/Performance_and_thread_safety.html –

+0

@ThangPham - धन्यवाद, मैं नई कड़ी आपके द्वारा दी गई साथ मेरा उत्तर नवीनीकृत किया है। –

+0

क्या यह जावा 7 के लिए जेएक्सबी के रिलीज के साथ एक ज्ञात मुद्दा भी है? आपके द्वारा दिया गया समाधान अभी भी पकड़ लेगा, लेकिन यह जानना अच्छा होगा कि यह अभी भी सक्रिय रूप से देखने के लिए कुछ है या नहीं। –

1

हाँ, यह एक रिसाव है। यह हर बार इस विधि को बुलाया जाता है, यह वर्ग "ruby.oracle_servlet.schemas" लोड करेगा।

JAXBContext.newInstance(“ruby.oracle_servlet.schemas”) 
संबंधित मुद्दे