2011-06-29 24 views
6

मेरा सवाल यह है कि, जेवीएम परियोजना में सभी कक्षाओं को कब लोड करता है? इसके अलावा, हमें कक्षा लोडर की धारणा की आवश्यकता क्यों है।जावा क्लास लोडर का उद्देश्य क्या है?

मुझे खुशी होगी अगर आप मुझे ऐसी स्थिति का उदाहरण दे सकें जहां आप कक्षा लोडर का उपयोग करते हैं और आप उस स्थिति में क्लास लोडर का उपयोग क्यों करते हैं।

+4

हो सकता है कि सामान्य रूप से वर्ग लोडर का अध्ययन करने और विशिष्ट प्रश्न पूछना। "क्लास लोडर के बारे में आप जो कुछ जानते हैं उसे समझाएं" पूछना आईएमएचओ के लिए पूछने के लिए बहुत कुछ है। – Arne

+0

+1 आर्ने। क्लासलोडर/क्लास लोडिंग एक बड़ा विषय है। क्लासलोडर स्वयं ही एक वर्ग है, और क्लासलोडर्स को विभिन्न नीतियों के साथ श्रेणीबद्ध रूप से व्यवस्थित किया जा सकता है; स्वयं-पहले, माता-पिता और पहले थ्रेड कॉन्टेक्स्ट क्लासलोडर्स हैं - एक विचित्र रूप से बड़ा विषय लेकिन सौभाग्य से कई स्रोतों द्वारा दस्तावेज किया गया है, गुगलिंग प्राप्त करें और बहुत कुछ पढ़ने के लिए तैयार हों। – earcam

उत्तर

13

जेवीएम परियोजना में सभी वर्गों को लोड करता है।

JVM कक्षाएं कम या ज्यादा "मांग पर" लोड करता है। अर्थात। रनटाइम में सभी कक्षाओं को आम तौर पर लॉन्च पर लोड नहीं किया जाएगा।

इस विषय पर जानकारी के लिए इन URL को देखें:

कारण है कि हम एक वर्ग लोडर की धारणा की क्या ज़रूरत है

कक्षा लोडर हमें विभिन्न स्रोतों से कक्षाएं लोड करने की अनुमति देते हैं।

  • इंटरनेट से डिस्क
  • एक क्रम उत्पन्न बाइट सरणी
  • पर एक जार फ़ाइल

यह एक अधिक आवेदन के शुभारंभ बनाता है (जो एप्लेट के लिए एक विशिष्ट उपयोग मामला है) लचीला और मॉड्यूलर।

मुझे स्थिति है जहाँ आप वर्ग लोडर का उपयोग करें और क्यों तुम वहाँ वर्ग लोडर का उपयोग के साथ एक उदाहरण देता हूँ।

एक वर्ग-लोडर के बिना आप दूर नहीं मिलेगा, तो मैं "के रूप में जब आप एक कस्टम वर्ग लोडर की क्या ज़रूरत है" अपने प्रश्न की व्याख्या करेंगे।

व्यक्तिगत रूप से मैंने बाइट-कोड मैनिपुलेशन लाइब्रेरी (ASM) का उपयोग करके कुछ प्रयोग किए हैं, जहां मैंने फ़ील्ड को get- और set-method कॉल के साथ एक्सेस किया है। मैंने कक्षाओं को फिर से लिखने के लिए एक कस्टम क्लास लोडर का उपयोग किया था क्योंकि वे लोड किए गए थे। मुझे नहीं पता कि यह एक सामान्य उपयोग मामला है, लेकिन मुद्दा यह है कि मैं इसे बिना किसी के कर सकता था!

आप एक प्लगइन-सिस्टम की कल्पना भी कर सकते हैं जो कुछ प्लगइन निर्देशिका से परिधीय वर्ग लोड करता है।

+0

'डायनामिक क्लास लोडिंग' एक अच्छा उदाहरण हो सकता है जिसमें हम कक्षा को फोर्सनेम (स्ट्रिंग क्लैज) विधि का उपयोग गतिशील रूप से कंटेनर में कक्षा लोड करने के लिए करते हैं ... – Rupesh

1

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

 
static { 
    MyClass.class.getName(); 
} 

Custom classloader is rarely needed, most commons cases are: AOP (for example runtime on-load instrumentation of classes with Javassist), remote class loading (loading a class from remote location), encrypted class loading (deciphering class code and loading).

1

You use class Loader for loading classes if you are developing application which can support plugins. Sample: You have application for video player and each codec is plugin in your application. you have folder ./codecs and there you put your plugin codecs. You search the folder for jar files and load all jar files with Class loader.

2

A class is loaded whenever it is executed directly orif it is referenced in another class which is to be executed... for example

class A 
{} 
class B extends A 
{ 
    public static void main(String arr[]) 
    {} 
} 

here whenever u get execute class B,the class A is loaded automatically

now consider this

class A 
{} 

class B 
{ 
    public static void main(String arr[]) 
    { 
    A ob=new A();//here class A is need to be loaded by JRE 
    } 
} 
1

JVM loads a Class the first time it is referenced. For in depth analysis of Class Loaders look here

0

Class loader is used in many cases. Few examples are:

  1. Class.forName to get Java classes at runtime
  2. Reflection API
  3. Eclipse debugger

There are lot of other examples as well.

0

Default Class Loader will load .class file only once, even though you are using that multiple times in your program. After loading.class file, if it is modified outside then default class loader wont load updated version of class file(.class file is already available in method area). You can resolve this problem, by defining your own customized Class Loader.

Main advantage of customized class loader is you can control, class loading mechanism based on your requirement.

java.lang.ClassLoader अपने अनुकूलित क्लास लोडर को परिभाषित करने के लिए। जावा में प्रत्येक वर्ग लोडर java.lang.ClassLoader क्लास का बच्चा वर्ग होना चाहिए, या तो सीधे अप्रत्यक्ष रूप से। इसलिए, यह वर्ग सभी अनुकूलित वर्ग लोडर के लिए बेस क्लास के रूप में कार्य करता है।

नोट: वेब सर्वर और एप्लिकेशन सर्वर को डिजाइन/विकसित करते समय, आमतौर पर अनुकूलित क्लास लोडर का उपयोग क्लास लोडिंग तंत्र को अनुकूलित करने के लिए किया जाता है।

उदाहरण के लिए:

public class CustClassLoader extends ClassLoader{ 
    public Class loadClass(String cname) throws ClassNotFoundException{ 
    //check for updates and laod updated .class 
    //file and returns corresponding Class 
    } 
} 

class Client{ 
    public static void main(String [] args){ 
     Dog d1 = new Dog(); 
     CustClassLoader c1 = new CustClassLoader(); 
     c1.loadClass("Dog"); 
     // 
     // 
     // 
     c1.loadClass("Dog"); 
     // 
    // 
    } 
} 
संबंधित मुद्दे