सामान्य शब्दों में समस्या जावा के सुरक्षा मॉडल है कि वास्तव में रोकने का प्रयास करता है एक वर्ग है कि पहले से लोड किया जा चुका है फिर से लोड किया जा रहा है।
बेशक जावा ने शुरुआत के बाद से गतिशील वर्ग लोडिंग का समर्थन किया है, क्लास पुनः लोड करना मुश्किल है।
यह हानिकारक (और एक अच्छे कारण के लिए) पर विचार किया गया था कि एक चल रहे जावा एप्लिकेशन को दुर्भावनापूर्ण कोड के साथ एक नई कक्षा के साथ इंजेक्शन दिया गया था। उदाहरण के लिए, java.lang.String ने इंटरनेट से आने वाले कार्यान्वयन को क्रैक किया है, कि स्ट्रिंग बनाने की बजाय, कुछ यादृच्छिक फ़ाइल हिले को विधि लंबाई() का आह्वान करता है।
तो, जावा जिस तरह से जावा की कल्पना की गई थी (और मैं परिणाम में .NET CLR मानता हूं, क्योंकि यह जेवीएम में अत्यधिक "प्रेरित" था) पहले से लोड कक्षा को उसी वीएम को फिर से लोड करने से रोकने के लिए था।
उन्होंने इस "फीचर" को ओवरराइड करने के लिए एक तंत्र की पेशकश की। क्लासलोडर, लेकिन क्लास लोडर के लिए नियम फिर से थे, उन्हें एक नया वर्ग लोड करने का प्रयास करने से पहले "पैरेंट" क्लासलोडर को अनुमति मांगी जानी चाहिए, अगर माता-पिता पहले से ही कक्षा को लोड कर चुके हैं, तो नई कक्षा को नजरअंदाज कर दिया जाता है।
उदाहरण के लिए मैं classloaders कि LDAP या आरडीबीएमएस से कक्षाओं लोड
गर्म तैनाती जब अनुप्रयोग सर्वर जावा ईई के लिए मुख्यधारा हो गया (और भी सूक्ष्म पात्र की आवश्यकता बनाने के जावा दुनिया में एक जरूरत बन जाता इस्तेमाल किया है वसंत की तरह इस तरह के बोझ से बचने के लिए)।
प्रत्येक संकलन ड्राइव के बाद किसी भी पागल ड्राइव के बाद पूरे ऐप सर्वर को पुनरारंभ करना।
तो ऐप सर्वर प्रदाता, इस "कस्टम" वर्ग लोडर को गर्म तैनाती में मदद करने के लिए, और कॉन्फ़िगरेशन फ़ाइल का उपयोग करने के लिए, उस व्यवहार को सेट करते समय अक्षम किया जाना चाहिए। लेकिन ट्रेडऑफ आपको विकास में बहुत सारी स्मृति का उपयोग करना है। तो ऐसा करने का अच्छा तरीका हर 3 - 4 तैनाती को पुनरारंभ करना है।
यह अन्य भाषाओं के साथ नहीं होता है जो शुरुआत से ही अपनी कक्षाओं को लोड करने के लिए डिज़ाइन किए गए थे।
उदाहरण के लिए रूबी में, आप रनिंग क्लास में विधियों को भी जोड़ सकते हैं, रनटाइम पर एक विधि ओवरराइड कर सकते हैं या यहां तक कि एक अद्वितीय विशिष्ट ऑब्जेक्ट में एक विधि भी जोड़ सकते हैं।
इन प्रकार के वातावरण में व्यापार निश्चित रूप से स्मृति और गति है।
मुझे उम्मीद है कि इससे मदद मिलती है।
संपादित
मैं इस उत्पाद कुछ समय पहले कि वादा किया पुनः लोड संभव के रूप में सरल बनाया जाए कि मिल गया है। जब मैंने पहली बार यह जवाब लिखा था, तो मुझे लिंक याद नहीं आया, और मैं करता हूं।
यह JavaRebel from ZeroTurnaround
इस समुदाय विकी क्यों है? – Eddie
सोचा कि अगर मैं कुछ अस्पष्ट छोड़ देता हूं तो इससे मदद मिल सकती है ... डिफ़ॉल्ट रूप से ऐसा करें, क्या यह बुरा शिष्टाचार है? –
मजेदार: अभी एक बार फिर से पढ़ते समय एक विचार-ओ मिला, धन्यवाद! –