2012-03-08 12 views
10

मैं जावा में ClassLoader सीख रहा हूं, तो मैं जानना चाहता हूं कि क्यों JVM में कई क्लासलोडर हैं, क्यों न केवल एक? पहला लोड <Java_Runtime_Home>/lib, फिर <Java_Runtime_Home>/lib/ext लोड करें, और अंतिम लोड classpath लोड करें।क्यों jvm में कई clasloaders है? क्यों नहीं?

यदि आपके पास कस्टम क्लासलोडर है, तो सिस्टम का पहला।

कोई मुझे बता सकता है कि जेवीएम में कई क्लासलोडर क्यों हैं?

उत्तर

17

एक बहुत ही उपयोगी एप्लिकेशन एक वेब जावा ईई सर्वर में कई वेब अनुप्रयोगों को तैनात करने में सक्षम होना है।

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

+0

लेकिन वेब सर्वर का अपना लोडर है। इसमें कई क्लासलोडर हो सकते हैं। – liuxiaori

+0

शायद मैं चाहता हूँ! धन्यवाद! – liuxiaori

+0

तो एक असंबंधित नोट पर, एकल जेवीएम में सिंगलटन के कई उदाहरण हो सकते हैं ?? एक प्रति वर्ग लोडर? – user1071840

4

यह आपको एक ही JVM में एकाधिक एप्लिकेशन चलाने की अनुमति देता है।

यह आपको कोड के हिस्सों को उतारने और उन्हें चल रहे सिस्टम में अपग्रेड करने की अनुमति देता है।

आप उपयोगी http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html

6

इसके कई कारण एक से अधिक classloader समर्थन करने के लिए कर रहे हैं OSGi के बारे में यह जानकारी प्राप्त कर सकता है (भले आप केवल एक आवेदन है)।

पहला: कक्षाओं को अलग करना। एक एप्लिकेशन सर्वर की कल्पना करो। कई स्वतंत्र परियोजनाओं में एक ही पुस्तकालय शामिल हो सकते हैं। यदि प्रत्येक एप्लिकेशन का अपना क्लासलोडर होता है तो वे टकराव के बिना अलग-अलग संस्करण लोड कर सकते हैं और AFAIK स्थिर फ़ील्ड प्रति क्लासलोडर को तत्काल चालू कर दिया जाता है।

दूसरा: कक्षाओं को बदलने के लिए क्लासलोडर को ओवरराइट किया जा सकता है। एक कक्षा लोडर लोड समय के दौरान कक्षाओं को बढ़ा सकता है। पहलू उन्मुख प्रोग्रामिंग (AspectJ) के लिए उपयोगी या डीबग या प्रोफाइलिंग कोड जोड़ना। केवल एक पुस्तकालय को संशोधित करने का एक आसान तरीका है, लेकिन दूसरा इसे अलग-अलग क्लासलोडर्स के माध्यम से लोड नहीं कर रहा है।

5

enter image description here कक्षा लोडर श्रेणीबद्ध होते समय एक श्रेणीकरण मॉडल का उपयोग करते हैं और एक प्रतिनिधि मॉडल का उपयोग करते हैं। कक्षा लोडर अपने माता-पिता से स्वयं को लोड करने का प्रयास करने से पहले कक्षा को लोड करने के लिए अनुरोध करते हैं। जब एक वर्ग लोडर कक्षा को लोड करता है, तो पदानुक्रम में वर्ग लोडर कक्षा को दोबारा लोड नहीं करेंगे। इसलिए विशिष्टता बनाए रखा जाता है। एक बच्चे वर्ग लोडर द्वारा लोड किए गए वर्गों में पदानुक्रम के ऊपर अपने माता-पिता द्वारा लोड की गई कक्षाओं में दृश्यता है लेकिन उपरोक्त आरेख में समझाया गया है कि विपरीत सही नहीं है।

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