मैं सामान्य की तलाश नहीं कर रहा हूं "आप केवल System.gc() का उपयोग कर जावा में जीसी को संकेत दे सकते हैं" उत्तर, यह सवाल यह नहीं है कि यह सवाल क्या है।जावा: आप JVMTI के ForceGargabeCollection का उपयोग करके वास्तव में जीसी को कैसे मजबूर करते हैं?
मेरे प्रश्न व्यक्तिपरक नहीं हैं और वास्तविकता पर आधारित हैं: जीसी को जावा में एक तथ्य के लिए मजबूर किया जा सकता है। हमारे द्वारा दैनिक रूप से उपयोग किए जाने वाले कई कार्यक्रम इसे करते हैं: इंटेलिजे आईडीईए, नेटबीन, विजुअलVM।
वे सभी बल जीसी होने के लिए कर सकते हैं।
यह कैसे किया जाता है?
मुझे लगता है कि वे सभी JVMTI का उपयोग कर रहे हैं और अधिक विशेष रूप से फोर्सगर्बेज चयन ("बल" देखें) लेकिन मैं इसे अपने लिए कैसे कोशिश कर सकता हूं?
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection
भी ध्यान रखें कि इस सवाल के बारे "क्यों" मैं ऐसा करना चाहते हैं, हम उसे नहीं है: "एक कार्यक्रम VisualVM के लिए इसी तरह हम लिख रहे हैं" "क्यों" "जिज्ञासा" या हो सकता है, आदि
सवाल वास्तव में है "आप JVMTI के ForceGarbageCollection का उपयोग करके जीसी को कैसे मजबूर करते हैं"?
क्या JVM को किसी विशेष पैरामीटर के साथ लॉन्च करने की आवश्यकता है?
क्या कोई जेएनआई आवश्यक है? यदि हां, तो वास्तव में कौन सा कोड?
क्या यह केवल सूर्य वीएम पर काम करता है?
कोई भी पूर्ण और संकलित उदाहरण का स्वागत किया जाएगा।
मैं इसे एक हठधर्मिता एक पंडिताऊ व्याख्या के आधार पर फोन नहीं होता। वहां अधिकांश जेवीएम सिस्टम Systemcc() पर कॉल को अक्षम करना संभव बनाता है, इसलिए आप इसे करने के लिए विश्वास नहीं कर सकते हैं। काफी बार जहां आपके पास एक अच्छी तरह लिखित ऐप है जहां जीसी मजेदार काम कर रहा है, एक लाइब्रेरी पेश कर रहा है जहां डेवलपर ने सोचा था कि वह सिस्टम.gc() को कॉल करके "सुनिश्चित कर सकता है कि स्मृति उपलब्ध है", इसे बंद करना सबसे अच्छा तरीका है अपने अच्छे जीसी प्रदर्शन वापस। – Fredrik
उपयोगकर्ता पर अभी भी नियंत्रण है। हॉटस्पॉट वीएम के लिए आप या तो '-XX: + DisableExplicitGC' सेट कर सकते हैं या आप नहीं करते हैं। इसलिए जब तक आप JVM झंडे 'System.gc() 'पर नियंत्रण रखते हैं, काफी विश्वसनीय है। तर्क केवल लाइब्रेरी लेखकों पर लागू होता है जो उन झंडे को नियंत्रित नहीं कर सकते हैं/यह नहीं मान सकते कि यह कौन सा वीएम चलाएगा। यह एक सामान्य मामला (spec) बनाम ठोस उपयोग (उपयोगकर्ता द्वारा नियंत्रित सभी पैरामीटर के साथ) चीज है। – the8472
आवेदन लेखकों के पास आमतौर पर जेवीएम झंडे का नियंत्रण नहीं होता है। अपवाद तब होता है जब एप्लिकेशन लॉन्चर में लपेटा जाता है जो उपयोगकर्ता या sysadmin को tweaking से रोकता है। यह पैडेंट्री नहीं है। वास्तव में, ध्वज विशेष रूप से जावा अनुप्रयोगों/अनुप्रयोग लेखकों के खिलाफ बेवकूफ चीजों को करने के लिए लोगों की रक्षा के लिए है। –