2010-09-10 16 views
5

मुझे एक एक्स/वाई चारों ओर पास करने की आवश्यकता है। मैं सिर्फ java.awt.Point का उपयोग कर रहा था। मैं इसे ऐप की प्रकृति पर विचार करने के लिए बहुत कुछ करता हूं, लेकिन सामान्य सरणी के बाद धीमा हो जाता है। मैंने अपना खुद का "फास्टपॉइंट" बनाने की भी कोशिश की जो कि एक इंट एक्स/वाई और बहुत ही सरल वर्ग कन्स्ट्रक्टर है, जो वास्तव में भी धीमी है।अंक धीमा क्यों हैं

समय मिलसेकंड में है।

java.awt.Point: 10,374
FastPoint: 10032
सरणी: 1210

public class FastPoint { 

    public int x; 
    public int y; 

    public FastPoint(int x, int y) { 
      this.x = x; 
      this.y = y; 
    } 
} 

Jvisualvm प्वाइंट (या तो AWT या अपने खुद के) सरल पूर्णांक [] सरणी की तुलना में स्मृति के टन का उपयोग कर रहे कहते हैं ।

मुझे लगता है कि उम, मूल प्रकार के बजाय ऑब्जेक्ट बनाने से बस ऊपर की ओर है? इस प्वाइंट क्लास को ट्विक या ऑप्टिमाइज़ करने का कोई तरीका? मैं पहले से ही मूल int arrays (जो अब बहुत तेज है) पर स्विच कर चुका है, लेकिन यह समझने की कोशिश कर रहा है कि यह धीमा क्यों है और यदि कुछ भी है तो मैं इसके बारे में कुछ कर सकता हूं?

टेस्ट कोड:

for (int i = 0; i < maxRuns; i++) { 
    point = new Point(i,i); 
} 

for (int i = 0; i < maxRuns; i++) { 
    a[0] = i; a[1] = i; 
} 
+1

मुझे विश्वास नहीं है कि ऑब्जेक्ट्स के बजाय सरणी का उपयोग करने से 900% की वृद्धि होगी। एमएस में समय -> लेकिन क्या करने के लिए? –

+0

for (int i = 0; i < maxRuns; i++) { point = new Point(i,i); }for (int i = 0; i < maxRuns; i++) { a[0] = i; a[1] = i; } dime

+1

भी, आपके सरणी संस्करण में, आप ** ** सरणी ** तत्काल नहीं कर रहे हैं। ऑब्जेक्ट/सरणी बनाने और समान सरणी में * तत्व * तत्वों को निर्दिष्ट करने के बीच अलग-अलग लागत * विशाल * है। –

उत्तर

9

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

प्वाइंट: 19 नैनो सेकंड/यात्रा

सरणी: 47 नैनो सेकंड/यात्रा

यह अपेक्षा की जाती है, क्योंकि सरणी पहुंचों को सीमाओं की जांच करने की आवश्यकता होती है, लेकिन फील्ड असाइनमेंट नहीं करता है (जेआईटी ने स्पष्ट रूप से बिंदु निर्माता को रेखांकित किया है)।

यह भी ध्यान दें कि सीपीयू प्रोफाइलिंग के लिए वर्चुअल मशीन का वाद्ययंत्र अतिरिक्त ओवरहेड होता है, जो कुछ मामलों में - परीक्षण के तहत आवेदन के प्रदर्शन व्यवहार को बदल सकता है।

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