2012-06-06 17 views
6

मेरे पास एक जावा प्रोग्राम है जो डेटाबेस से बहुत सारे इनपुट डेटा को पढ़ता है, इसे कुशलतापूर्वक पढ़ता है, फिर डेटा को अन्य डेटाबेस (ओडीबीसी ड्राइवरों का उपयोग करके, एक्सेल और एक्सेस डेटाबेस, एक नई विंडोज 7 मशीन पर) लिखता है। कार्यक्रम ग्रहण से चलाने के लिए लगभग 17 मिनट लगते हैं, लेकिन जब मैंने निष्पादन योग्य .jar फ़ाइल बनाई तो इसे चलाने के लिए अतिरिक्त 10 मिनट लगते हैं (27 कुल)।मेरी .jar फ़ाइल ग्रहण में प्रोग्राम की तुलना में धीमी गति से क्यों चल रही है?

धीमी जार फ़ाइलों (एसओ और गूगल खोजकर) के लिए अब तक के दो कारणों से यह पता चला है कि वे संपीड़ित हैं और कमांड प्रॉम्प्ट (या त्रुटि लॉग) को लिखने में बहुत अधिक समय लगता है ग्रहण में कंसोल। मैंने एक असम्पीडित जार फ़ाइल बनाने की कोशिश की और यह केवल 10 सेकंड तक फैल गया (जो पूरी तरह से यादृच्छिक हो सकता था, क्योंकि रन टाइम वैसे भी 30 सेकंड तक भिन्न होते हैं)। मेरे पास प्रोग्राम में केवल 10 System.out.println() कमांड हैं, इसलिए इसे बहुत धीमा नहीं करना चाहिए।

किसी भी विचार के कारण यह इतना धीमा चल रहा है, और यदि कोई तरीका है तो मैं इसे फिर से तेज कर सकता हूं? मुझे बताएं कि क्या कोई अन्य विवरण है जो प्रासंगिक हो सकता है जिसमें मुझे शामिल करना चाहिए। धन्यवाद!

+2

क्या आपने पूरी तरह से System.out.println() कमांड को हटाने का प्रयास किया है? कंसोल के लिए प्रिंटिंग बहुत गति खाती है। –

+3

मैं लॉग संदेशों को मुद्रित करने के लिए लॉगर या log4j लाइब्रेरी का उपयोग करने का सुझाव देता हूं और आप यह देखने के लिए टाइम-स्टैंप का उपयोग कर सकते हैं कि आपके कोड का कौन सा हिस्सा बाधा उत्पन्न कर रहा है। यह एक ठोस समाधान नहीं है लेकिन इसे समस्या को कम करने में मदद करनी चाहिए। – user845279

+0

@ लाइ Xin चू के साथ सहमत हैं। लेकिन अगर सभी प्रिंटों को हटाना मुश्किल है तो बस अपना प्रोग्राम चलाएं और एसटीडीओयूटी को फाइल करने के लिए रीडायरेक्ट करें। मुझे विश्वास नहीं है कि ग्रहण कंसोल खोल से धीमा काम कर सकता है। – AlexR

उत्तर

4

JAMon का उपयोग करें। यह एक निगरानी पुस्तकालय है, जो आपको आपके कोड के निष्पादन समय को मापने में मदद करेगा।

अपनी विधियों में कुछ निगरानी कोड जोड़ने के बाद, इसे ग्रहण में और एक जेएआर फ़ाइल के रूप में चलाएं, और परिणामों की तुलना करें। यह आपको खोज को संकीर्ण करने की अनुमति दे सकता है।

इसके अलावा: जांचें कि क्या आप अपनी जावा फ़ाइल को उसी जावा संस्करण के साथ चला रहे हैं, जो ग्रहण का उपयोग करता है (उदाहरण के लिए जावा 1.4.x 1.6.x से बहुत धीमा हो सकता है)।

1

आप जावा वीएम पैरामीटर (जैसे जीसी, अधिकतम मेमोरी इत्यादि) की जांच कर सकते हैं। डेटा-गहन अनुप्रयोगों के लिए जीसी चीजों को बहुत धीमा कर सकता है।

2

मेरे मामले में, मेरे आवेदन में ग्रहण पर चलाने के लिए 3 सेकंड लग गए, जबकि जब मैं इसे जार से चलाता हूं तो 2 मिनट लगते हैं।
मेरी गलती "Package required libraries into jar" चुनने के लिए मेरी परियोजना को चलने योग्य जार में निर्यात करते समय चुनना था।

मैं समय लेकिन कुछ भी मदद की नीचे लाने के लिए विभिन्न तरीकों की कोशिश की, को छोड़कर ..

आप अन्य Maven निर्भरता या जार फ़ाइलों अपनी परियोजना में है, तो आप "**Extract required libraries into generated jar**" का उपयोग करना चाहिए एक जार में अपनी परियोजना निर्यात करते समय ।

इसने मेरी समस्या को सेकंड में हल किया & अब मेरी ग्रहण & जार फ़ाइल एप्लिकेशन चलाने के लिए एक ही समय ले रही है, 2 सेकंड।

उम्मीद है कि यह नए संघर्षकर्ताओं की सहायता करेगा।

सम्मान।

+1

यहां पर, ग्रहण में चलना ठीक था (लगभग तुरंत), जार में प्रक्रिया 4 मिनट पीछे थी। आपके सुझाव ने मेरी समस्या हल की – benez

2

मुझे एक ही समस्या थी। खोल धीमी गति के आदेश चला रहा था और इसमें कंसोल आउटपुट के साथ कुछ लेना देना नहीं था। मैंने JVM मेमोरी मानों को सेट करने का प्रयास किया लेकिन इससे कोई फर्क नहीं पड़ता

समाधान सभी जेएआर के साथ एएनटी फ़ाइल को बाहरी फ़ोल्डर में पैकेज करना था, "जेनरेट किए गए उप-फ़ोल्डर में कॉपी लाइब्रेरी कॉपी करें "रननेबल जेएआर फाइल निर्यात" विज़ार्ड में जार "विकल्प। फिर मुख्य जेएआर को ए-सीपी [YOURSUBFOLDER] कमांड लाइन विकल्प के साथ चलाएं।

+0

इसके लिए धन्यवाद! जाहिर है कि जावाएफएक्स के FXMLLoader क्लास पर भी इसका असर पड़ता है, जिससे यह "पैक किए गए जार" के साथ लगभग 10 गुना धीमा हो जाता है और यह कि फाइलें पहले से ही अनपॅक किए गए हैं ... – DragonGamer

+0

वही परिणाम यहां, मैंने भी नहीं किया '-cp' की आवश्यकता है, क्योंकि मैनिफेस्ट फ़ाइल पहले ही उप-जेएआर के स्थान को निर्दिष्ट करती है – golimar

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