मैं स्कैला और जावा संस्करणों के लगभग समान, कार्यान्वयन के बीच कुछ प्रदर्शन विसंगति में भाग गया। मैं जावा संस्करण देख रहा हूं जो स्कैला संस्करण से 68% तेज है। ऐसा क्यों होता है इसके बारे में कोई विचार है?स्कैला बनाम जावा प्रदर्शन (हैशसेट और बिग्राम पीढ़ी)
जावा संस्करण:
public class Util {
public static Set <String> toBigramsJava(String s1) {
Set <String> nx = new HashSet <String>();
for (int i = 0; i < s1.length() - 1; i++) {
char x1 = s1.charAt(i);
char x2 = s1.charAt(i + 1);
String tmp = "" + x1 + x2;
nx.add(tmp);
}
return nx;
}
}
स्काला संस्करण:
object Util {
def toBigramsScala(str: String): scala.collection.mutable.Set[String] = {
val hash: scala.collection.mutable.Set[String] = scala.collection.mutable.HashSet[String]()
for (i <-0 to str.length - 2) {
val x1 = str.charAt(i)
val x2 = str.charAt(i + 1)
val tmp = "" + x1 + x2
hash.add(tmp)
}
return hash
}
}
टेस्ट परिणाम:
scala> Util.time(for(i<-1 to 1000000) {Util.toBigramsScala("test test abc de")}) 17:00:05.034 [info] Something took: 1985ms
Util.time(for(i<-1 to 1000000) {Util.toBigramsJava("test test abc de")}) 17:01:51.597 [info] Something took: 623ms
सिस्टम:
मैं 4 कोर और 8gig रैम के साथ Ubuntu 14.04 पर इस भाग गया,। जावा संस्करण 1.7.0_45, स्कैला संस्करण 2.10.2।
मेरे blog पर कुछ और जानकारी है।
हालांकि यह कोई प्रश्न नहीं है ... आप इसे प्रश्न और उत्तर के मिलान के सेट में संशोधित कर सकते हैं। –
मेरा सुझाव है कि आप अंतर देखने के लिए बाइट कोड देखें। –
क्या यह 'लूप्स' के लिए जावा का अनुकूलन हो सकता है जो स्कैला में मौजूद नहीं है, क्योंकि उनके पास स्कैला में कुछ विशिष्टताएं हैं? वे दो विधियां वास्तव में समान लगती हैं। इसके अलावा, यदि आप scala.collection.mutable.HashSet को java.util.HashSet के साथ प्रतिस्थापित करते हैं तो क्या होता है? – Dici