2017-09-20 24 views
5

मेरे पास तीन मॉड्यूल हैं: मॉड्यूल-ए, मॉड्यूल-बी, मॉड्यूल-सी। मॉड्यूल-ए और मॉड्यूल-बी बूट परत में हैं। मॉड्यूल-सी के लिए परत मैं खुद को बनाते हैं। मॉड्यूल-सी में सेवा के जेपीएमएस कार्यान्वयन है जो इंटरफ़ेस मॉड्यूल-ए में है।जावा 9 में मॉड्यूल परत को कैसे हटाएं?

यह मॉड्यूल-बी में मॉड्यूल-सी के साथ परत बनाने का तरीका है।

ModuleFinder finder = ModuleFinder.of(moduleCPath); 
ModuleLayer parent = ModuleLayer.boot(); 
Configuration cf = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of("module-c")); 
ClassLoader scl = ClassLoader.getSystemClassLoader(); 
ModuleLayer layer = parent.defineModulesWithOneLoader(cf, scl); 

फिर मॉड्यूल-बी में मैं मॉड्यूल-सी से सेवा कॉल करता हूं। सेवा निष्पादन पूरा होने के बाद मुझे मॉड्यूल-सी और नई बनाई गई परत की आवश्यकता नहीं है। इसे JVM से कैसे हटाएं और सभी संसाधनों को कैसे छोड़ दें? क्या यह layer = null; करने के लिए पर्याप्त है?

+0

'मॉड्यूल-सी' के बिना एक नया 'मॉड्यूलरियर' बनाना क्या काम नहीं करता है? – nullpointer

+0

क्या आप इस प्रश्न को अपडेट कर सकते हैं कि आपने वास्तव में क्या प्रयास किया और इसके परिणामस्वरूप इसका क्या परिणाम हुआ। – nullpointer

+0

@nullpointer मेरे प्रश्न में सभी जानकारी है, मैं क्या करता हूं और इसके बारे में क्या सवाल है। अगर आप कुछ समझ में नहीं आते हैं, तो कृपया जो कहें आप समझ में नहीं आते हैं। –

उत्तर

5

मॉड्यूल परत, परत में मॉड्यूल, और परत का समर्थन करने वाले वर्ग लोडर, जीसीएड/अनलोड किए जाने योग्य हैं जब वे अब पहुंच योग्य नहीं हैं।

यदि आप इसे अपने आप साबित करना चाहते हैं तो layer ऑब्जेक्ट के लिए एक कमजोर संदर्भ बनाएं और आपको यह देखना चाहिए कि संदर्भ को साफ़ किया गया है (और यदि आप संदर्भ कतार का उपयोग कर रहे हैं तो कतारबद्ध) जब परत GC'ed है।

2

एक EMPTY_LAYER (प्रश्न पर टिप्पणी से एक से, new HashSet<> जड़ों के रूप में असाइन करने की कोशिश) अपने यूज-केस को हल करेगा यहाँ, जिसमें अन्य परतों layer भीतर कोई और अधिक नियंत्रित करने के लिए संदर्भ आपके द्वारा बनाए गए:

layer = ModuleLayer.empty(); 

खाली परत लौटाता है। खाली परत में कोई मॉड्यूल नहीं हैं। यह कोई माता पिता नहीं है।


स्पष्ट रूप से एक परत को हटाने के लिए JVM फार्म में सक्षम होने के बारे में सोचा पर, मैं शायद इस तरह के एक एक JVM के बाद से सार्वजनिक रूप से उजागर एपीआई अपेक्षा नहीं कम से कम एक गैर खाली परत होती है माना जाता है, बूट परत, जो जावा वर्चुअल मशीन शुरू होने पर बनाई गई है।

और यदि ऐसी कोई विधि सामने आती है, तो मुझे आश्चर्य है कि उपयोगकर्ता इस परत को भी आजमा सकते हैं और हटा सकते हैं। हालांकि मैं इस भाग पर तकनीकी रूप से काल्पनिक होने की कोशिश कर रहा हूं।

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