Я новичок в Scala, я пытаюсь создать большую карту из IndexedSeq, я нашел упоминание о SO о том, что создание карты функционального стиля намного медленнее, чем настоятельный Java-стиль, решил проверить его сам. До сих пор я узнал, что не только функциональный код Scala работает медленнее, но и очень важно. Что я делаю неправильно, почему мой код Scala в несколько раз медленнее? На моем домашнем компьютере он работает в 220 мс. (Java) и 460 мс. (Scala)Почему мой фрагмент создания карты стиля Scala медленнее, чем Java?
Scala version
private val testSize: Int = 1000000
val seq: IndexedSeq[Int] = for (i <- 0 until testSize) yield Random.nextInt()
val warmupMapt0 = System.nanoTime()
var warmupMap: mutable.HashMap[Int, Int] = new mutable.HashMap[Int, Int]
warmupMap.sizeHint(testSize)
for (i <- 0 until testSize) warmupMap.put(i, seq(i))
val t0 = System.nanoTime()
var map: mutable.HashMap[Int, Int] = new mutable.HashMap[Int, Int]
map.sizeHint(testSize)
for (i <- 0 until testSize) map.put(i, seq(i))
println((System.nanoTime() - t0)/ 1000000 + " ms.")
Java version
private static final int TEST_SIZE = 1_000_000;
public static void main(String[] args) {
int[] ar = new int[TEST_SIZE];
Random random = new Random();
for (int i = 0; i < TEST_SIZE; i++) {
ar[i] = random.nextInt();
}
Map<Integer, Integer> warmupMap = new HashMap<>(TEST_SIZE);
for (int i = 0; i < TEST_SIZE; i++) {
warmupMap.put(i, ar[i]);
}
Map<Integer, Integer> map = new HashMap<>(TEST_SIZE);
long t0 = System.nanoTime();
for (int i = 0; i < TEST_SIZE; i++) {
map.put(i, ar[i]);
}
System.out.println((System.nanoTime() - t0)/1_000_000 + " ms.");
}
Это может помочь вам http://stackoverflow.com/questions/9799085/scala-perf-why-is-this-scala-app-30x-slower-than-the-equivalent-java-app?rq=1 –
@ Jean-BaptisteYunès Да, я видел это, поэтому я добавил val warmupMapt0 = System.nanoTime() перед тем, как начать, а также попытался запустить его с консоли, но это не помогло. – MaxNevermind
Не могли бы вы добавить свои временные результаты? – maasg