2010-09-16 6 views
26

संकलित करते समय एकाधिक कोर/प्रोसेसर का उपयोग करके मैं एंटी (जावैक लक्ष्य के माध्यम से) का उपयोग कर जावा एप्लिकेशन बनाने के लिए आठ कोर वाले डेस्कटॉप का उपयोग करता हूं। क्या एक से अधिक धागे या प्रक्रिया का उपयोग करके संकलन को तेज करने का कोई तरीका है?जावा

मुझे पता है कि मैं समानांतर में कई चींटी कार्यों को चला सकता हूं, लेकिन मुझे नहीं लगता कि इसे एक संकलन लक्ष्य पर लागू किया जा सकता है, या यह करता है?

+2

यहाँ संबंधित सवाल देखें: http://stackoverflow.com/questions/523575/is-there-a-way-to-improve-multicore-multiprocessor-performance-of-the-java-com – Elijah

उत्तर

17

मुझे कई कोरों के प्रभावी उपयोग करने के लिए चींटी को स्वयं बताने के किसी भी तरीके से नहीं पता है। लेकिन you can tell ant to use the Eclipse Compiler, जिसमें multithreaded compilation अंतर्निहित के लिए समर्थन है।

+0

यहाँ एक है [ब्लॉग के साथ एक्सेलिप जावा कंपाइलर चलाना] के बारे में अच्छा ब्लॉग आलेख [http://owenou.com/2009/11/18/running-eclipse-java-compiler-with-ant.html)। – sschuberth

+1

जेडीके 1 के साथ इंटेलिज 2017.1.3 का उपयोग करना।8 javac दोनों उदाहरणों में ग्रहण कंपाइलर से तेज़ी से समाप्त होता है - समानांतर निर्माण चालू हो जाता है और बंद हो जाता है। इसके साथ हमारे प्रोजेक्ट पर जैवैक के साथ पुनर्निर्माण के लिए ~ 23 सेकंड और ग्रहण कॉम्पेलर के साथ पुनर्निर्माण के लिए ~ 27 सेकंड लगते हैं - अजीब क्योंकि यह 4 कोर i7 प्रोसेसर है। – Volksman

1

The documentation यह इंगित करता है कि javac के साथ सही तरीके से काम करने की संभावना नहीं है।

किसी को भी इस तरह के एक ही समय में जावाडोक और javac के रूप में समानांतर में बड़े चींटी कार्य दृश्यों, भागने की कोशिश कर, परोक्ष की पहचान करने और सभी संगामिति कीड़े कार्य है कि वे चलाने फिक्सिंग का कार्य कर रही है।

तदनुसार, इस कार्य का उपयोग करने के दौरान, इसे एक उन्नत कार्य माना जाना चाहिए जिसका उपयोग कुछ बैच-प्रोसेसिंग या परीक्षण स्थितियों में किया जाना चाहिए, मल्टीवे सीपीयू पर निर्माण के समय को तेज करने के लिए एक आसान चाल के बजाय।

+0

अपवोट, दस्तावेज़ से भी: 'थर्ड पार्टी कार्य थ्रेड सुरक्षित हो सकता है या नहीं हो सकता है, और कुछ एंटी के मुख्य कार्य, जैसे निश्चित रूप से पुन: प्रवेश नहीं कर रहे हैं। – VolkerK

2

जब तक आप जिस जावैक को बुला रहे हैं, वह सभी कोरों का उपयोग नहीं करता है, इससे वास्तव में आप चींटी में क्या कहते हैं इससे कोई फर्क नहीं पड़ता। आप compiler विशेषता का उपयोग यह परिभाषित करने के लिए कर सकते हैं कि कार्य के लिए कौन सा जावा कंपाइलर उपयोग किया जाना चाहिए।

यदि आपके पास कई बिल्ड लक्ष्य हैं तो आप लक्ष्य (ओं) को निष्पादित करने के लिए fork=yes का उपयोग कर सकते हैं।

http://ant.apache.org/manual/Tasks/javac.html#compilervalues

+3

+1। मैं बस जोड़ना चाहता हूं कि वर्तमान में 'जावैक' एकल-थ्रेडेड है (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6629150) और यह बहु-थ्रेड (http) बनाने के लिए एक छोटा सा काम नहीं है : //blogs.sun.com/jjg/entry/towards_a_multi_threaded_javac)। –

0

के रूप में दूर नहीं मुझे पता है। ग्रहण कंपाइलर के पास कई कोर का उपयोग करके तेज़ी से काम करने के लिए कुछ काम किया गया है, लेकिन यह उतना ही नहीं खरीदता जितना आप इसे पसंद करेंगे।

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

0

आप अपनी बिल्ड की गति बढ़ाने और एकाधिक कोर का उपयोग करने के लिए Buck Build का उपयोग कर सकते हैं।

संक्षेप में:

बक निर्माण प्रणाली विकसित की और फेसबुक द्वारा उपयोग किया जाता है। यह को कोड, संसाधनों सहित छोटे, पुन: प्रयोज्य मॉड्यूल के निर्माण को प्रोत्साहित करता है, और कई प्लेटफार्मों पर विभिन्न भाषाओं का समर्थन करता है।

बक अपने मशीन पर एकाधिक कोर का लाभ लेने के लिए समानांतर में स्वतंत्र कलाकृतियों का निर्माण करता है। इसके अलावा, यह द्वारा अपरिवर्तित निर्माण समय को अपरिवर्तित मॉड्यूल का ट्रैक रखते हुए कम करता है ताकि मॉड्यूल का न्यूनतम सेट पुनर्निर्मित किया जा सके।