2008-12-04 13 views
9

मुझे जावा एप्लेट विरासत मिला है (एक वास्तविक <APPLET>) जो लगभग 4 दिनों के रनटाइम के बाद आउटऑफमेमरी अपवाद फेंकता है। एप्लेट की प्रकृति ऐसी है कि लोग वास्तव में लंबे समय तक इसे छोड़ देंगे।निरंतर पुल क्लास?

 
    num #instances #bytes class name 
    --- ---------- ------ ---------- 
     1:  14277 7321880 <constantPoolKlass> 
     2:  59626 5699968 <constMethodKlass> 
     3:  14047 5479424 <constantPoolCacheKlass> 
     4:  14277 5229744 <instanceKlassKlass> 
     5:  59626 4778944 <methodKlass> 
     6:  71026 3147624 <symbolKlass> 

मुसीबत है, मुझे समझ नहीं आता इन बातों में से किसी क्या कर रहे हैं:

चल रहा है, jmap -histo लगभग दो दिनों के बाद के रूप में शीर्ष ढेर उपभोक्ताओं को दर्शाता है। कम से कम दो चीजें चल रही हैं: निरंतर PoolKlass + constantPoolCacheKlass + instanceKlassKlass संबंधित दिखाई देता है, जैसा कि constMethodKlass + methodKlass करता है। नामों से, वे एक वर्ग लोडर से संबंधित दिखाई देते हैं।

अगर मुझे लगता है कि मुझे लगता है कि एप्लेट ने लगभग 14,277 ऑब्जेक्ट्स बनाये हैं, जहां प्रत्येक ऑब्जेक्ट में लगभग 4 9 626 विधियों के लिए लगभग 4 विधियां हैं। फिर भी jmap आउटपुट ऐसी बड़ी संख्या में उदाहरणों के साथ कोई वर्ग नहीं दिखाता है, और न ही यह अन्य वर्ग वस्तुओं की कुल योग 14277 तक जोड़ता है। इसलिए शायद मैं इन वस्तुओं के बारे में गलत हूं। क्या कोई समझा सकता है?

उत्तर

4

हाँ, ऐसा लगता है कि आप कक्षा लोडर लीक कर रहे हैं। यदि आप वास्तव में अपने कोड में क्लास लोडर नहीं बना रहे हैं (आमतौर पर URLClassLoader.newInstance या XSLT के माध्यम से) तो यह एप्लेट को पुनः लोड करने से संबंधित हो सकता है (हालांकि आप आमतौर पर उसी क्लास लोडर को वापस ले लेंगे)। लीक के संभावित कारण थ्रेडलोकल, जेडीबीसी ड्राइवर और जावा.बीन्स हैं।

2

स्पॉट ऑन - स्पष्ट रूप से क्लासलोडर समस्या। यह देखने के लिए बहुत अजीब है कि एक एप्लेट में हालांकि; आमतौर पर यह केवल ऐप्स सर्वर या आईडीई के साथ एक समस्या है। इस डिबग करने के लिए

2 तरीके हैं: या तो एक असली ढेर प्रोफाइलर है कि आप दिखा सकते हैं, जहां आपके भगोड़ा वर्ग डेटा संदर्भित है मिलता है, या एपीआई वर्गों पैच यहाँ वर्णित के रूप में: http://www.onjava.com/pub/a/onjava/2004/06/30/classloader2.html?page=2

संबंधित मुद्दे