2013-03-08 4 views
6

अच्छी तुलना परीक्षण परीक्षा लिखने के लिए आपको इसे कई हजार (लाख) बार चलाना होगा। यह अन्य कार्यक्रमों के प्रभाव (ज्यादातर मामलों में) स्तर होगा।एक अच्छा प्रदर्शन तुलना परीक्षण कैसे करें?

लेकिन यदि कोई JVM परिणाम पर प्रभाव डाल सकता है। उदाहरण के लिए:

पहले समाधान है:

final StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append(getStrOne()); 
    stringBuilder.append(getStrTwo()); 
    final String result1 = stringBuilder.toString(); 

और दूसरा है:

final String result2 = getStrOne() + getStrTwo(); 

मैं जो एक बेहतर है क्योंकि JVM परिणामों पर प्रभावित कर सकते हैं है पता नहीं है। कैसे पता चलेगा कि कौन सा बेहतर है?

अद्यतन: मेरा मतलब नहीं है कि वास्तव में कि comporation परीक्षण जोड़कर। मैं स्थिति की जांच करने के लिए कड़ी मेहनत कर रहा हूं।

+2

जेवीएम के परिणामों पर क्या प्रभाव हो सकता है इसका मतलब क्या है? – ddmps

+1

दूसरे को 'अंतिम स्ट्रिंग परिणाम 2 = "str1str2" में परिवर्तित किया जाएगा;' कंपाइलर द्वारा ... – assylias

+0

@Pescis उदाहरण कैशिंग के लिए। –

उत्तर

2

मैंने हाल ही में कुछ बेंचमार्क परीक्षण किए हैं जो यहां मिले उत्कृष्ट आईबीएम आलेख पर निर्भर हैं: http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html

  • रनटाइम अनुकूलन/पुनः संकलन अपने कोड की:

    लेख नुकसान है कि परिणाम की सटीकता को प्रभावित कर सकते हैं, उदाहरण के लिए के कई वर्णन करता है।

  • मृत कोड उन्मूलन (यानी अप्रयुक्त परिणाम अपने परीक्षण कोड निकालने का कारण सकता है)
  • कचरा संग्रहण
  • कैशिंग
  • ...

अंत में, एक साइट के लिए लेख के लिंक, जहां एक ढांचा downloaded हो सकता है। ढांचा एक परीक्षण विधि को स्पूल करने का एक बहुत अच्छा काम करता है, पुन: संकलन के साक्ष्य की तलाश करता है और निष्पादन के समय को व्यवस्थित करने की प्रतीक्षा करता है।

0

2 तार के मामले में, प्रदर्शन में अंतर बहुत मामूली हैं, लेकिन निम्न प्रयास करें:

String s = ""; 
for(int i = 0; i < 10000; i++) { 
    s += i; 
} 

बनाम

StringBuilder b = new StringBuilder(); 
for(int i = 0; i < 10000; i++) { 
    b.append(i); 
} 

आपको लगता है कि दूसरा पाश तरह से तेजी से होता है मिल जाएगा। क्यूं कर? चूंकि स्ट्रिंग कॉन्सटेनेशन प्रत्येक पुनरावृत्ति में एक नया String ऑब्जेक्ट बनाएगा, जो सीपीयू चक्रों और स्मृति को बर्बाद कर देता है।

मैं तुम्हें अदालत में तलब करेंगे:

एक अच्छा comparations परीक्षण परीक्षण आप इसे कई हजारों (लाखों) बार परीक्षण करने के लिए है लिखने के लिए। यह अन्य कार्यक्रमों के प्रभाव (ज्यादातर मामलों में) स्तर होगा।

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

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