2011-09-11 20 views
8

मैं इस प्रकार एक परीक्षण कार्यक्रम लिख रहा हूँ:एक जेएफआरएएम मेमोरी रिसाव का कारण बनता है?

  1. एक उपयोगकर्ता बटन एक क्लिक करता है, यह 50 JFrames खोलता है।
  2. उपयोगकर्ता बटन बी क्लिक करता है यह बटन ए

क्लिक करके दिखाया सभी JFrames disposes मुझे लगता है कि स्मृति बटन क्लिक करने के बाद बी कमी नहीं करता है मैं इस कार्य प्रबंधक का उपयोग निर्धारित किया है, ctrl + alt + डेल विंडोज़ में, और "जावा" के स्मृति उपयोग की जांच।

+0

कुछ कोड हमें निश्चित रूप से मदद करेंगे ... –

+1

देखें [रनटाइम पर शीर्ष-स्तर कंटेनर निकालें] (http://stackoverflow.com/questions/6309407/remove-top-level-container-on-runtime/6310284# 6,310,284)। – trashgod

+1

मेरा कोड कुछ खास नहीं है। नए जेएफआरएएम द्वारा जेएफआरएएम बनाना। निपटान को कॉल करके इसका निपटान करें() – Bear

उत्तर

11

यह सही है, कोई रास्ता नहीं है, हल करने के लिए है कि सक्षम नहीं (न केवल जावा पी एल में),

1) वास्तव में रनटाइम पर Top-Level Containers के बहुत सारे निर्माण नहीं करतीं/उड़ना, क्योंकि वे अंतिम रूप कभी नहीं रहे हैं, और जब तक वर्तमान JVM उदाहरण बाहर निकालता है, और इन ऑब्जेक्ट GC'ed नहीं किया गया केवल अपने Grapfics2D

2) रनटाइम पर myContainer#dispose()के रूप में वर्तमान JVM उदाहरण के लिए एक ही है 10 JVM उपलब्ध है और इस्तेमाल किया स्मृति

3) बनाने के केवल कुछ Top-Level Containers (अधिकतम एक साथ दिखाया गया है), फिर से उपयोग के साथ कनेक्शन है कि है, लेकिन वहाँ JPanel 1.st JComponent के रूप में डाल दिया और myPanel#removeAll() फोन में, अन्यथा आप RootPane निकाल देंगे और से अपने कंटेनर केवल सीमाओं रहता है :-) पारदर्शी होगा

4) आंशिक रूप से JVM कॉल जीसी द्वारा मेमोरी इस्तेमाल किया कम करने के लिए संभव है, लेकिन सिर्फ Graphics2D से राशि returs और Garbage immediatelly काम करता है नहीं करता है,

5) अधिक here उपयोगी जानकारी here

+0

thx के लिए धन्यवाद। लेकिन मुझे सुझाव 3 नहीं समझता है। – Bear

+0

बीटीडब्ल्यू, क्या जावा समस्या को जानता है? – Bear

+0

@ देखो आपके पास दो choises हैं 1) तीन - चार शीर्ष-स्तर कंटेनर बनाएं, 1। जेएफआरएएम अन्य जेडियलोग (मॉडेलिटी के साथ भी) या जेविंडो, 2) होगा या कार्डलाउट http://download.oracle.com/javase/tutorial/uiswing/layout/card.html देखें और फिर टॉप-अप बनाने के बजाय betweens कार्ड स्विच करें। स्तर कंटेनर :-) – mKorbel

2

किसी भी कोड के बिना हम आपकी बहुत मदद नहीं कर सकते ... क्या आप jFrame को कॉल कर रहे हैं। dispose()?

सार्वजनिक शून्य निपटाने()

विज्ञप्ति अपने स्वामित्व वाली बच्चों की इस विंडो, इसके उप-घटक द्वारा इस्तेमाल किया देशी स्क्रीन संसाधनों के सभी, और सब। वह है, इन घटकों के संसाधन नष्ट हो जाएंगे, किसी भी स्मृति वे उपभोग ओएस पर वापस आ जाएंगे, और उन्हें के रूप में चिह्नित किया जाएगा।

अधिक जानकारी उपलब्ध here

0

अगर वहाँ जीसी (कचरा कलेक्टर) अपने फ्रेम से जड़ है, तो आप निपटाने विधि कहा जाता है, यह कचरा एकत्र नहीं प्राप्त करता है के लिए एक मजबूत संदर्भ है, इसलिए आप सभी को निपटाने के बाद आप किसी भी स्मृति परिवर्तन नहीं देख सकते हैं फ्रेम यदि आप स्मृति चाहते हैं, जो सामान आपको छोड़ना चाहिए, तो आपको कचरे को फ्रेम एकत्र करने की आवश्यकता है।

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