2013-02-07 32 views
13

का उपयोग कर रहा हूं तो मैंने ग्रोवी के @ कॉम्पाइलस्टैटिक का उपयोग करना चाहिए, मैंने "What's new in Groovy 2.0" के माध्यम से पढ़ा है और मैं @ कॉम्पाइल स्टेटिक का उपयोग करने के बारे में थोड़ा उलझन में हूं। लेख में उल्लेख किया गया है कि @CompileStatic एनोटेशन उन डेवलपर्स के लिए जोड़ा गया था जो Java7 के invoke गतिशील भाग का लाभ लेने में सक्षम नहीं थे।यदि मैं जावा 7

तो डेवलपर्स प्रदर्शन में सुधार के लिए देख ग्रूवी 2.0 में ज्यादा परिवर्तन नहीं देखना होगा, अगर वे सौभाग्य से JDK 7 पर चलाने के लिए सक्षम नहीं हैं, ग्रूवी विकास दल सोचा उन डेवलपर्स दिलचस्प प्रदर्शन को बढ़ावा देने, दूसरे के बीच हो सकता है टाइप चेक कोड को स्थिर रूप से संकलित करने की इजाजत देकर फायदे।

मेरे सवाल है, अगर मैं JDK 7 उपयोग कर रहा हूँ और मैं --indy फ्लैग जोड़ने के निर्देशों का पालन करें, मैं @CompileStatic जोड़ने के लिए कुछ प्रदर्शन बढ़ जाती है को देखने के लिए की जरूरत है? This blog सुझाव देता है कि मैं चाहता हूं, लेकिन मुझे यकीन नहीं है कि उसने सही तरीके से संकलित किया है कि उसने ग्रहण के भीतर किया था।

अद्यतन: फिबोनैकी कोड के विभिन्न क्रमपरिवर्तन चलाते समय आंकड़े यहां दिए गए हैं।

> groovy --indy FibBoth.groovy 
..........Fib (non-static indy): 1994.465 
..........Fib (static indy): 529.197 

> groovy FibBoth.groovy  
..........Fib (non-static): 1212.788 
..........Fib (static): 525.671 

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

उत्तर

12

इंडी संस्करण पूरी तरह से गतिशील ग्रोवी है, क्योंकि यह ज्ञात है, जेडीके 7 इनवोकैडीनामिक के लिए केवल तेज़ धन्यवाद। @ कॉम्पाइलस्टैटिक का मतलब स्थिर संकलन है। सामान्य ग्रोवी से तेज़ होने पर, यह केवल ग्रोवी के उप-समूह को संकलित कर सकता है और थोड़ा अलग व्यवहार करता है। विशेष रूप से सभी गतिशील विशेषताएं अब उपलब्ध नहीं हैं। तो यदि आप गतिशील विशेषताओं का उपयोग करना चाहते हैं तो इंडी एकमात्र विकल्प है। यदि आप एक स्थिर व्यक्ति होंगे और केवल भाषा के एक छोटे से हिस्से का उपयोग करेंगे, तो @ कॉम्पाइलस्टैटिक का उपयोग किया जा सकता है।

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

आप अंत

+0

अच्छा जवाब। रिलीज में शब्द से मुझे जो हिस्सा याद आया वह यह है कि वे स्वतंत्र विशेषताएं हैं। तो अगर जावा 7 के साथ -इंडी का उपयोग करते हुए भी, कंपाइलस्टैटिक एक पेर्फ बूस्ट दे सकता है (जब तक कोड वास्तव में कंपाइलर द्वारा चेक किया जा सकता है)। हमने फिबोनाची के साथ इंडी और कंपाइलस्टैटिक के साथ विभिन्न क्रमपरिवर्तनों का त्वरित परीक्षण किया और निम्नलिखित पाया: – Scott

5
इसे नीचे उबाल करने के लिए

में अपने उपयोग के अनुसार तय करने के लिए है, @CompileStatic गति के पक्ष में कुछ ग्रूवी गतिशील क्रम कार्यक्षमता निकाल देता है।

तो, सैद्धांतिक रूप से:

  • JDK7 स्टैंडर्ड की तुलना में तेजी से किया जाना चाहिए, क्योंकि कुछ भूमि के ऊपर और सुविधाओं निकाल दिए जाते हैं JDK6 से invokedynamic
  • @CompileStatic की वजह से तेजी से होना चाहिए।

यह सब कि चेतावनी के साथ कि यह काफी हद तक निर्भर करता है कि आप क्या कर रहे हैं, क्योंकि विभिन्न सुविधाओं को विभिन्न डिग्री के लिए अनुकूलित किया गया है।