2012-01-16 26 views
10

मैं जावा में एक छवि प्रसंस्करण अनुप्रयोग विकसित कर रहा हूं लेकिन मुझे हाल ही में वाला में दिलचस्पी है। इसका कारण यह है कि मेरा मानना ​​है कि मैं एप्लिकेशन प्रदर्शन में वृद्धि कर सकता हूं (मेरी चिंता मुख्य रूप से सी/सी ++ पुस्तकालयों के साथ अंतःक्रिया में है, क्योंकि ऐसा लगता है कि < Example> जावा में सी/सी ++ पुलों का उपयोग करते समय एक प्रदर्शन सजा है)।VALA बनाम एओटी संकलन के बीच प्रदर्शन अंतर?

पृष्ठभूमि (जो मैं जानता हूँ):

  • वाला सी कोड में तब्दील हो और फिर एक देशी मशीन कोड के लिए अपने संकलित।
  • एओटी (जावा/मोनो सी #) देशी मशीन कोड भी बना सकता है (वीएम का उपयोग करने के बजाय, लेकिन अभी भी रनटाइम बंडल की आवश्यकता है)।
  • कुछ मामलों में वीएम का उपयोग करके, देशी मशीन कोड से भी तेज हो सकता है (क्योंकि इसे जेआईटी कंपाइलर के माध्यम से अनुकूलित किया जा सकता है)।
  • उपभोग्य सी/सी ++ पुस्तकालयों का उपयोग VALA का उपयोग करके किया जा सकता है।

वहाँ कुछ है कि मेरे सिर के चारों ओर जा रहा है और मैं उत्तर नहीं मिलता है:

  1. C/C++ उपभोज्य पुस्तकालयों एक AOT संकलक का उपयोग कर उत्पादन किया जा सकता है? (मुझे नहीं लगता)।
  2. क्या उत्पादित एओटी बाइनरी अभी भी पुल प्रदर्शन मुद्दा है? (मुझे लगता है कि यह करता है)।
  3. वीएएलए में कॉलिंग सी/सी ++ पुस्तकालयों में सी से उन्हें कॉल करने के समान प्रदर्शन है? (मुझे लगता है यह है)।

कोई अंतर्दृष्टि?

+0

यह प्रश्न "रचनात्मक" होने के लिए पर्याप्त ध्यान केंद्रित करता है; या कम से कम लिंक और डुप्लिकेट के लिए बंद कर दिया। –

+0

क्षमा करें मेरी अंग्रेजी अच्छी नहीं हो सकती है। मुझे यकीन नहीं है कि क्यों बंद किया गया था। Upvoting के लिए धन्यवाद pst। – lepe

उत्तर

5

1. क्या एओटी कंपाइलर का उपयोग कर सी/सी ++ उपभोग्य योग्य पुस्तकालयों का उत्पादन किया जा सकता है?

यह संभव नहीं होना चाहिए क्योंकि हमारे पास कोई शीर्षलेख नहीं है और यह सख्त रूप से सी क्लास नहीं है जो एओटी कंपाइलर बना रहा है लेकिन बस मशीन कोड है।

(साइड नोट: जावा क्लासेस called inside C/C++ हो सकता है, लेकिन एओटी कंपाइलर्स एक बाइनरी फ़ाइल उत्पन्न करता है, मुझे यकीन है कि आप उस फ़ाइल के बाहर से अपने जावा कक्षाओं तक नहीं पहुंच सकते हैं)।

उत्तर: नहीं

2. पुल प्रदर्शन मुद्दा है, का उत्पादन किया AOT द्विआधारी करता है अभी भी?

सबसे पहले, हमें यह जानने की ज़रूरत है: यदि किसी पुल (जैसे जेएनआई, जावैकप, इत्यादि) का उपयोग कर जावा से किसी भी सी/सी ++ कक्षा को कॉल करना हमेशा प्रदर्शन हानि का परिणाम होगा?

##[email protected] से "W_" के अनुसार:

यह कैसे आप इसे कॉल कर रहे हैं पर निर्भर करता है (उदाहरण के लिए यदि तर्क होना जरूरी बदला है और इस तरह के)। किसी भी तर्क के बिना बस लाइब्रेरी फ़ंक्शन पर कॉल करना या प्रकार रूपांतरण को किसी भी सी ऐप में ऐसा करने से अलग समय नहीं लेना चाहिए।

लेकिन जैसा कि मैंने OpenCV पुस्तकालय के लिए सेतु के रूप में JavaCV उपयोग कर रहा हूँ, यह वस्तुओं के कई प्रकार है, जो अगर ऊपर सच है, यह प्रदर्शन को प्रभावित करना चाहिए उपयोग करता है।

तो, यह तर्कसंगत हो सकता है कि एओटी संकलन निष्पादन को थोड़ा बढ़ा सकता है लेकिन अभी भी पुल से गुज़रना है और प्रकार रूपांतरण करना है।

उत्तर: हाँ (लेकिन थोड़ा तेजी से हो सकता है)

3. कॉलिंग C/C++ वाला में पुस्तकालयों उन्हें सी से कॉल करने जैसा ही प्रदर्शन है?

जैसा कि यह सीधे सी में परिवर्तित होता है, मुझे कोई कारण नहीं दिखता है। यह #[email protected] से "nemequ" द्वारा समर्थित किया गया:

काफी, हाँ। वैला में अस्थायी चर का उपयोग करने की आदत है, लेकिन यह बिल्कुल ठीक है कि अधिकांश कंपाइलर दूर आसानी से अनुकूलित कर सकते हैं। यदि आप जीसीसी का उपयोग कर रहे हैं, तो पास-ओ 2 और आपको अच्छा होना चाहिए।

उत्तर: हाँ

फिर भी मैं नहीं जानता कि क्यों "किसी को" मेरे सवाल को बंद करने के पक्ष में मत दिया और वह/वह इसके बारे में टिप्पणी करने के लिए भी परवाह नहीं की। मुझे लगता है कि ये प्रश्न/उत्तर रचनात्मक पर्याप्त हैं (pst टिप्पणी की गई) और वे अन्य लोगों के लिए सहायक हो सकते हैं जो वाला या एओटी कंपाइलर्स के लिए नए हैं।

यदि मेरे निष्कर्ष सही नहीं हैं तो कृपया मुझे सही करें।

+1

मुझे लगता है कि सब ठीक है, सिवाय इसके कि वाला गोबेल का उपयोग करता है, और गोबजेक्ट उदाहरणों को बनाने और संदर्भ गणना रखने में भारी होने के लिए जाना जाता है। हालांकि मैं व्यक्तिगत रूप से कचरा कलेक्टरों का पता लगाने पर अपने निर्धारणा के लिए संदर्भ गिनती पसंद करता हूं। – lethalman

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