2012-12-10 4 views
6

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

तरह
(int i=0; i<100; i++){ 
// do nothing 
} 

उपयोग करता है, उनके सॉफ्टवेयर के अनुसार, लगभग 400 बाईटकोड (संभवतः तरह (2 बाईटकोड की जाँच के लिए मैं प्लस 2 incrementing बाईटकोड के लिए कुछ करता है, तो मैं < 100) * 100 = 400 बाइटकोड) तो हमें बहुत तंग कोड लिखना है। इसलिए, जैसा कि मैंने कुछ अलग नेविगेशन एल्गोरिदम को आजमाया है, यह महत्वपूर्ण है कि मैं यह समझने में सक्षम हूं कि मेरा कोड कितना बाइटकोड उपयोग कर रहा है - मैं यह कैसे कर सकता हूं?

(यह संभव है - वे यह करते हैं - मुझे यकीन है कि कैसे नहीं! इसके अलावा, उन्हें किसी भी तरह से खेलने में आने से जेआईटी को रोकना चाहिए। मुझे पता है कि प्रत्येक रोबोट एक अलग थ्रेड में चलाया जाता है, इसलिए मैं ' मीटर यकीन जवाब थ्रेड प्रवंचना मैं के बारे में पता नहीं है किसी प्रकार का होता है)

+0

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

उत्तर

5

आप गिनती प्राप्त कर सकते हैं हॉटस्पॉट जेवीएम के डीबग बिल्ड का उपयोग करके (whic एच here पाया जा सकता है) और -XX:+CountBytecodes ध्वज के साथ इसे चला रहा है।

+0

यदि मैं इसे डाउनलोड करता हूं और इसे javac 1.7.0_09 द्वारा संकलित क्लास फ़ाइल पर चलाता हूं तो मुझे "असमर्थित major.minor संस्करण 51.0" त्रुटि मिलती है। क्या एक अलग कंपाइलर का उपयोग करना चाहिए? – andyInCambridge

+0

ठीक है, मैंने जावा 6 वीएम से लिंक किया है, इसलिए यह आश्चर्य की बात नहीं है :) मुझे जावा 7 वीएम के डिबग बिल्ड के बारे में पता नहीं है जो ऑनलाइन उपलब्ध है, इसलिए जावा 6 कंपाइलर और रीकंपाइल स्थापित करने के लिए आपकी सबसे अच्छी शर्त है। वैकल्पिक रूप से, आप जावा 7 वीएम को अपने आप संकलित कर सकते हैं, लेकिन मुझे लगता है कि यह अधिक परेशानी होगी। – int3

+0

आपको -XX: -UseCompiler भी निर्दिष्ट करना होगा या अन्यथा कोड देशी में संकलित हो जाएगा और फिर इसे गिना नहीं जाएगा। –