2010-01-07 8 views
12

मान लीजिए कि मेरे पास 500 एमबी से अधिक मेरे कार्यक्रम से जुड़ी 500 जार फ़ाइलें हैं (सभी जारों का आकार, प्रत्येक नहीं) और मेरा प्रोग्राम उनमें से एक में स्थित कक्षा में कॉल करता है। जावा कक्षा के लिए जार के माध्यम से कैसे खोज करता है, और इसकी दक्षता क्या है? पर)? हे (लॉग (एन))?जावा कक्षाओं के लिए जार फ़ाइलों को कुशलता से कैसे खोजता है?

उत्तर

10

जावा पूरी तरह से योग्य नाम पर सटीक मिलान के लिए जार की आंतरिक निर्देशिका संरचना में दिखता है। यह लग रहा है; यह खोज नहीं करता है। यदि आपके पास क्लासपाथ पर 500 जार फ़ाइलें हैं, तो जावा उन्हें एक निश्चित क्रम में एक-एक करके देखेगा जब तक कि यह कोई मिलान न मिले। यदि किसी दिए गए वर्ग वाले जार में आखिरी है, तो जावा 500 जार फ़ाइलों को देखेगा। तो मुझे लगता है कि यह ओ (एन) है।

अद्यतन: व्यवहार ऊपर वर्णित डिफ़ॉल्ट व्यवहार है। हालांकि, जैसा कि हसन ने इंगित किया था, इसे रूट जार फ़ाइल में JarIndex प्रदान करके अनुकूलित किया जा सकता है, जिसे क्लासलोडर को पैकेज नाम पर एक साधारण लुकअप के साथ उचित जार फ़ाइल ढूंढने की अनुमति मिलती है।

+0

जावा 7 में, वे ओएसजीआई – notnoop

+0

(-1) के समान मॉड्यूल सिस्टम का समर्थन करके इसे पुराना करने का प्रयास कर रहे हैं, जो जानकारी पुरानी है। –

+1

@ हसन। इंडेक्स वैकल्पिक हैं, डिफ़ॉल्ट वास्तव में रैखिक है: नई कक्षा लोडिंग योजना वर्तमान विस्तार तंत्र के शीर्ष पर विकसित अनुप्रयोगों के साथ पूरी तरह पिछड़ा संगत है। जब क्लास लोडर पहली जार फ़ाइल लोड करता है और INDEX.LIST फ़ाइल मेटा-आईएनएफ निर्देशिका में पाई जाती है, तो यह इंडेक्स हैश टेबल का निर्माण करेगी और एक्सटेंशन के लिए नई लोडिंग योजना का उपयोग करेगी। अन्यथा, वर्ग लोडर मूल रैखिक खोज एल्गोरिदम का उपयोग करेगा। – djna

7

डिफ़ॉल्ट रूप से यह रैखिक होता था; हालांकि, JDK 1.3 के बाद से एक जेएआर इंडेक्स को एप्लिकेशन की पहली जेएआर फ़ाइल में एम्बेड किया जा सकता है।

इसका मतलब है कि यदि सूचकांक जेएआर फ़ाइल में एम्बेड किया गया है तो क्लास लोडर आवेदन से संबंधित कई जेएआर फाइलों पर वितरित सभी वर्गों को कुशलतापूर्वक पा सकता है।

जेएआर इंडेक्सिंग पर SUN Resource से लिंक करें। नोट: गैर-वर्ग संसाधनों को कवर नहीं किया जा रहा है।

+0

क्या आपको विश्वास है कि सूचकांक का उपयोग आम है? मुझे लगता है कि अभी भी रैखिक व्यवहार डिफ़ॉल्ट है, आपको एक इंडेक्स जोड़ने की जरूरत है, और कई लोग नहीं करते हैं। – djna

+0

सभी ज़िपों में फ़ाइल के अंत में एक इंडेक्स है, इसलिए इससे कोई फर्क नहीं पड़ता है। –

+0

हम्म, ऐसा लगता है कि एएनटी डिफ़ॉल्ट http://ant.apache.org/manual/CoreTasks/jar.html जेएआर फाइलों में इंडेक्स पीढ़ी के लिए झूठी है। मुझे आश्चर्य है कि आईडीई क्या करता है? –

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