JVMs

2012-12-18 9 views
7

के बीच कक्षाएं साझा करें मैं एक ऐसे ऐप्लिकेशन पर काम कर रहा हूं जिसे एक ही समय में एक ही कंप्यूटर में कई बार instanciated किया जा सकता है। प्रत्येक JVM एप्लिकेशन कक्षाओं को अपनी स्मृति में अनावश्यक रूप से लोड करता है, क्योंकि कक्षाएं सभी अनुप्रयोगों के लिए समान होती हैं।JVMs

मैंने सीडीएस here और here के बारे में पढ़ा, लेकिन ऐसा लगता है कि यह केवल जेडीके वर्गों के लिए मान्य है।

मैं अपने आवेदन कक्षाओं के डेटा को JVMs के बीच कैसे साझा कर सकता हूं?

+0

मुझे एक नया वर्ग लोडर लिखने और प्रक्रियाओं के बीच साझा स्मृति का उपयोग करने की तरह लगता है। लेकिन यह अधिक रैम खरीदने से ज्यादा दर्दनाक होगा। –

+0

"लेकिन यह केवल जावा कक्षाओं के लिए मान्य प्रतीत होता है", JVMs में और क्या साझा करने की आवश्यकता है? – Swapnil

+0

@SwapnilS यह मेरा मतलब नहीं था, बुरी स्पष्टीकरण के लिए खेद है। मैंने जो कहने की कोशिश की वह यह था कि यह केवल जेडीके वर्गों को साझा करता है। मैं सवाल संपादित करूंगा। –

उत्तर

3

मैं विशेष रूप से इस विषय के बराबर नहीं था लेकिन मैंने कुछ शोध किया। मुझे लगता है कि हम काफी निश्चितता के साथ कह सकते हैं कि अधिकांश जेवीएम में यह व्यावहारिक रूप से संभव नहीं है। नीचे दिया गया प्रश्न आपके जैसा ही है और इसमें उत्तर और टिप्पणियां हैं जो उपयोगी हो सकती हैं।

Can multiple JVM processes share memory for common classes?

एक संभावित विकल्प आपको कक्षाएं आप एक प्रक्रिया में एक साथ साझा करते हैं और JMX (जावा प्रबंधन एक्सटेंशन) की तरह कुछ का उपयोग कर उनकी कार्यक्षमता को बेनकाब करना चाहते हैं डाल सकता है। इस तरह कई प्रक्रियाओं को कई बार लोड किया जाता है, उन्हें सभी वर्गों को लोड नहीं करना पड़ेगा। लेकिन यह कुल संसाधन पदचिह्न को कितना कम कर सकता है निश्चित रूप से संदिग्ध और मामला निर्भर है।

1

हालांकि यह सिद्धांत में अच्छा लगता है, यह वास्तव में व्यावहारिक नहीं है। जावा क्लास की स्टोरेज छवि में स्थिर डेटा की एक निश्चित मात्रा होती है, लेकिन शायद उतना ही "परिवर्तनीय" डेटा - अन्य वर्गों के लिए लिंकेज पॉइंटर्स, विभिन्न रनटाइम टेबल, जेआईटीसीड कोड इत्यादि। यह पता लगाना कि क्या तेज है और क्या नहीं है ' टी सबसे अच्छा है और उन डिज़ाइनों की ओर जाता है जो सर्वश्रेष्ठ प्रदर्शन नहीं करते हैं।

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