मैं अपने जावाएफएक्स एप्लिकेशन (इसकी निर्भरता इंजेक्शन का लाभ प्राप्त करने के लिए) में स्प्रिंग बूट तकनीक का उपयोग करने के लिए तैयार हूं, लेकिन मैं स्मृति पर परिणामों के बारे में सोच रहा हूं, क्योंकि आप जानते हैं कि "घटक" नोटेशन वाला कोई भी वर्ग लोड किया जाएगा मेटास्पेस के लिए (चूंकि यह स्प्रिंग बूट इससे एक स्थिर वस्तु बनाएगा), इसलिए मेटास्पेस पर लोड किए गए जावाएफएक्स व्यू कंट्रोलर के दसियों के साथ उन्हें एप्लिकेशन के लॉन्च से अंत तक कचरा कभी नहीं मिलेगा, जो स्पष्ट रूप से एक बुरी चीज है , क्या इस मुद्दे से निजात पाने का कोई तरीका है?

5
Youssef Idraiss 24 पद 2021, 07:14
1
नमस्ते, ढांचा काफी हल्का है, स्मृति उपयोग ज्यादातर समवर्ती अनुरोधों और एप्लिकेशन कोड पर निर्भर करेगा
 – 
jspcal
24 पद 2021, 07:17
4
उन वस्तुओं की कुल स्मृति छोटी होने की संभावना है; जैसे ~ 100 केबी। मेमोरी उपयोग में यह छोटी वृद्धि स्प्रिंग बूट, स्प्रिंग डीआई आदि के उपयोग के लाभों से कहीं अधिक है। (यह सवाल मुझे समयपूर्व अनुकूलन की तरह लगता है।) लेकिन अगर आपको लगता है कि इससे कोई फर्क पड़ेगा ... इसे मापें
 – 
Stephen C
24 पद 2021, 07:47
1
आप पूरी तरह से सही हैं, लेकिन मुझे लगता है कि यह वेब विकास के मामले के लिए है, जावाएफएक्स अनुप्रयोगों के लिए जब व्यू कंट्रोलर को कचरा नहीं मिलता है, इसका मतलब यह भी है कि व्यू ऑब्जेक्ट्स हमेशा टेबल व्यू, लिस्ट व्यू, पैन ... जो ले सकते हैं कुछ महत्वपूर्ण स्थान, मैं इसका परीक्षण करने का प्रयास करूंगा, धन्यवाद।
 – 
Youssef Idraiss
24 पद 2021, 07:59
1
(रिकॉर्ड के लिए, 100kB एक अतिथि के रूप में है। लेकिन भले ही मेमोरी ओवरहेड 10MB हो, फिर भी मुझे नहीं लगता कि यह मायने रखता है।)
 – 
Stephen C
24 पद 2021, 08:02
2
सिंगलटन का अर्थ है "एकल उदाहरण"। स्टेटिक एक कार्यान्वयन विवरण है। एक सिंगलटन को किसी भी तरह से स्थिर नहीं होना चाहिए!
 – 
Boris the Spider
24 पद 2021, 10:05

1 उत्तर

सबसे बढ़िया उत्तर

आप टिप्पणियों में लिखते हैं:

JavaFX एप्लिकेशन जब व्यू कंट्रोलर को कचरा इकट्ठा नहीं मिलता है, इसका मतलब यह भी है कि व्यू ऑब्जेक्ट हमेशा वहीं रहेंगे टेबल व्यू, लिस्ट व्यू, पैन ... जो कुछ महत्वपूर्ण स्थान ले सकते हैं

लेकिन मुझे नहीं लगता कि ऐसा होना चाहिए।

नियंत्रक उदाहरण जो जावा नोड्स को संदर्भित करता है, वह किसी भी अन्य की तरह सिर्फ एक जावा ऑब्जेक्ट है और जब JVM में इसका कोई और संदर्भ नहीं होगा तो कचरा संग्रहण के लिए उपलब्ध होगा।

मान लें कि आप अपने JavaFX स्प्रिंगबूट एकीकरण को इस प्रकार कॉन्फ़िगर करते हैं:

तो आप स्प्रिंग बीन्स का उपयोग करने के लिए अपने नियंत्रक कारखाने को कॉन्फ़िगर करें:

fxmlLoader.setControllerFactory(
    springContext::getBean
);

फिर आपके नियंत्रक स्प्रिंग बीन्स हैं जिनका दायरा आप नियंत्रित कर सकते हैं।

अगर आप प्रोटोटाइप स्कोप का इस्तेमाल करते हैं:

@Bean
@Scope("prototype")
public PersonController personControllerPrototype() {
    return new PersonController();
}

फिर व्यवहार में निर्दिष्ट है:

स्प्रिंग एक प्रोटोटाइप बीन के पूरे जीवनचक्र का प्रबंधन नहीं करता है: कंटेनर एक प्रोटोटाइप ऑब्जेक्ट को इंस्टेंट करता है, कॉन्फ़िगर करता है और अन्यथा असेंबल करता है, और इसे क्लाइंट को सौंप देता है, उस प्रोटोटाइप इंस्टेंस का कोई और रिकॉर्ड नहीं होता है।

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

या, यदि आप केवल एक बार fxml लोड करना चाहते हैं और नियंत्रक को हमेशा के लिए रखना चाहते हैं तो आप ऐसा करने के लिए सिंगलटन स्कोप का उपयोग कर सकते हैं।

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

2
jewelsea 24 पद 2021, 10:25