2010-02-13 16 views
9

यह एंड्रॉयड प्लेटफॉर्म पर एक अपेक्षाकृत भारी प्रभाव (और अधिक speciffically मोबाइल Dalvik वी एम चल फोन के साथ instanceof कीवर्ड भालू?प्रभाव

+0

जावा के विरोध में एंड्रॉइड में आपको भारी प्रभाव क्यों लगेगा? –

+4

एंथनी, क्योंकि यह एक पूरी तरह से अलग वीएम है, स्टैक-आधारित के बजाय रजिस्टर-आधारित है? –

+0

उदाहरण कचरा बनाने का उदाहरण क्यों होगा? उदाहरण के परीक्षण यदि कोई ऑब्जेक्ट किसी प्रकार का उदाहरण है तो इसमें विधि आमंत्रण या ऑब्जेक्ट सृजन शामिल नहीं है। आप एक बकवास सवाल क्यों पूछ रहे हैं, असंबद्ध वीएम अवधारणाओं में शामिल होना जो कोई समझ नहीं लेते? –

उत्तर

3

मुझे नहीं लगता कि instanceof भालू है एक Dalvik वी एम पर भारी प्रभाव JVM करने का विरोध किया।

आपको कोई शक है, तो आप जब आप एक उपकरण आवंटन ट्रैकर कहा जाता है कि डी डी एम एस के लिए एक उपकरण के रूप में मानक आता है के साथ अपने एप्लिकेशन को चलाने के देख सकते हैं अपने आप के लिए।

+1

इससे मदद मिली। – Michiel

1

मुझे टी मिला टोपी उदाहरण अधिक तेज़ है (लगभग 60-85% समय)। हालांकि यह प्रतिशत तब होता है जब फ़ोन पृष्ठभूमि गतिविधि (उदा। जीसी, स्पर्श, बटन, इसे हिलाकर इत्यादि) के साथ प्रस्तुत किया जाता है लेकिन उदाहरण 50% से अधिक तेजी से रहता है। जब चक्रों की संख्या बहुत बड़ी होती है (यानी> 1000000) उदाहरण लगभग हमेशा तेज होता है। ऑर्डर जिसमें दो जबकि लूप प्रस्तुत किए जाते हैं (यानी पहले लूप का उदाहरण और फिर फ़ील्ड चेक लूप) परिणाम को प्रभावित करता है लेकिन उदाहरण सबसे तेज़ रहता है।

 AbstractParticle circleParticle = new CircleParticle(); 
     int cycles = 100000 

     long now1 = System.currentTimeMillis(); 
     int i = 0; 
     while(i<cycles) { 
      if(circleParticle instanceof CircleParticle) { 
       i++; 
      } 
     } 
     long timetaken1 = (System.currentTimeMillis()-now1); 

     long now2 = System.currentTimeMillis(); 
     int j = 0; 
     while(j<cycles) { 
      if(circleParticle.type == AbstractParticle.TYPE_CIRCLE) { 
       j++; 
      } 
     } 
     long timetaken2 = (System.currentTimeMillis()-now2); 

     if(timetaken1 < timetaken2) { 
      type1won++; 
     } 
     else if(timetaken2 < timetaken1){ 
      type2won++; 
     } 

     Log.d("instanceof test","type 1 favoured : "+((float)type1won/(type1won+type2won)));   
+1

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

+0

समझदार टिप्पणी, मुझे इसकी जांच करनी चाहिए; धन्यवाद। यह मुझे प्रश्नों के साथ छोड़ देता है हालांकि: कैसे एक तेजी से तेजी से था और 'चक्र' में वृद्धि होने पर समय क्यों बढ़ाया गया। मुझे याद होगा कि जब आप भविष्य में परीक्षण कर रहे हों तो आपने क्या बताया था। – Michiel

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

  • कोई संबंधित समस्या नहीं^_^