2011-01-27 15 views
6

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

असल में, जावा कंपाइलर (हार्ड एक, जावैक, जेआईटी नहीं) कोई ऑप्टिमाइज़ेशन करता है जैसे कि ए/4 को एक >> 2 में बदलना? या हर अनुकूलन जेआईटी के लिए एक काम है?

+0

डिवीजन बनाम बाएं शिफ्ट का समग्र कार्यक्रम गति पर कोई प्रभाव नहीं पड़ता है। मामूली बिट नहीं। – delnan

उत्तर

7

मानक जावा कंपाइलर कुछ अनुकूलन करता है, लेकिन यह उनमें से अधिकांश को जेआईटी में छोड़ देता है।

JIT जो प्रोसेसर वास्तव में कार्यक्रम चल रहा है पर जानता है और यह भी जानकारी क्रम की पहुंच है, और इसलिए यह अधिक अनुकूलन कर सकते हैं की तुलना में जावा पहले से कर सकता है। साथ ही, अग्रिम में व्यापक अनुकूलन करने से बाइट कोड कुछ हद तक "खराब हो सकता है", जो इसे अनुकूलित करने के लिए जेआईटी के लिए कठिन बना देता है।

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

हो सकता है कि इस उपकरण आप के लिए उपयोगी हो सकता है: Dalvik Optimization and Verification With dexopt

वैसे, उदाहरण आप का उल्लेख हमेशा मान्य नहीं है; a/4 को a >> 2 में बदलने से आपके प्रोग्राम को किसी भी प्रोसेसर पर तेज़ी से चलाने की गारंटी नहीं है। मैंने कहीं एक बार एक लेख पढ़ा (क्षमा करें, यह अभी नहीं मिल सकता है ...) कि स्पष्ट किया कि (मुझे लगता है कि) आधुनिक x86 प्रोसेसर पर, a >> 2 भी a/4 की तुलना में धीमी हो सकती है।

किसी भी मामले में, a/4 से a >> 2 को अपने स्रोत कोड में हाथ से समय-समय पर अनुकूलन न करें, जब तक आपके पास असली सबूत (प्रदर्शन माप से) नहीं है, जो इसे करने के लिए उपयुक्त है।

+0

धन्यवाद (आप दोनों)। मैं वास्तव में कोई माइक्रो-ऑप्टिमाइज़ेशन नहीं कर रहा हूं, मुझे आसान पठनीयता पसंद है, लेकिन यह सोच रहा था कि क्या जेआईटी के बिना डिवाइस हर संभव पाप से पीड़ित होंगे या यदि संकलक द्वारा मामूली अनुकूलन किया गया था। जैसा कि आपने उल्लेख किया है, मेरा उदाहरण यह छोटा नहीं है ... एक बुरा था। –

2

यदि आपका निष्पादन प्लेटफ़ॉर्म वास्तव में बाइटकोड निष्पादित कर रहा है, तो a/4 जैसी चीजों के बारे में आपकी अंतर्ज्ञान a >> 2 से अधिक होने की संभावना गलत है। आप यह पता लगाने की कुछ गंभीर आवेदन रूपरेखा क्या करने की जरूरत:

  • यह सार्थक अनुकूलन सब पर है या नहीं,
  • जहाँ आपके प्रयासों पर ध्यान केंद्रित करने के लिए, और
  • क्या (सूक्ष्म) अनुकूलन वास्तव में काम करते हैं।

एफडब्ल्यूआईडब्ल्यू, javac कंपाइलर अंकगणित माइक्रो-ऑप्टिमाइज़ करने का प्रयास करने की संभावना नहीं है। इष्टतम देशी कोड वास्तविक निष्पादन प्लेटफ़ॉर्म के हार्डवेयर पर निर्भर करता है, और यदि जैवैक ने बाइटकोड को अनुकूलित करने का प्रयास किया है तो यह जेआईटी कंपाइलर का कार्य अधिक कठिन बनाने की संभावना है।

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