Arkadii Ivanov
07/29/2019, 10:45 PMvar map: Map<Int, Int> = emptyMap()
repeat(10000) {
map += it to it * 2
}
Dominaezzz
07/29/2019, 10:47 PMDominaezzz
07/29/2019, 10:48 PMkpgalligan
07/29/2019, 10:56 PMolonho
07/30/2019, 5:45 AMMichał Kalinowski
07/30/2019, 6:44 AMKotlin 1.3.41:
JVM - 1101 ms
Native - 20403 ms
C++14, clang:
6.34732ms
so kotlin native is like 3400x slower than cpp 😞 and 20x slower than JVMArkadii Ivanov
07/30/2019, 6:50 AMMichał Kalinowski
07/30/2019, 7:11 AM#include <iostream>
#include <map>
#include <chrono>
int main() {
auto start = std::chrono::steady_clock::now();
std::map<int, int> map;
for (int i = 0; i < 10000; i++)
map.emplace(std::make_pair(i * 2, i));
auto end = std::chrono::steady_clock::now();
auto diff = end - start;
std::cout << std::chrono::duration<double, std::milli>(diff).count() << " ms\n";
return 0;
}
olonho
07/30/2019, 7:47 AMArkadii Ivanov
07/30/2019, 7:47 AMArkadii Ivanov
07/30/2019, 8:01 AMsksk
07/30/2019, 10:42 AMgildor
07/30/2019, 12:17 PMgildor
07/30/2019, 12:18 PMArkadii Ivanov
07/30/2019, 12:23 PMgildor
07/30/2019, 12:24 PMArkadii Ivanov
07/30/2019, 12:26 PMkpgalligan
07/30/2019, 12:27 PM.put
, so a 10k loop would make no sense at 29 seconds.gildor
07/30/2019, 12:29 PMOf course but allocations are what we are doing normallyThis example has no sense for me and I’m not sure how would do this normally
Arkadii Ivanov
07/30/2019, 12:30 PMArkadii Ivanov
07/30/2019, 12:33 PMgildor
07/30/2019, 12:34 PMgildor
07/30/2019, 12:34 PMPerhaps it can be replaced with just allocating 100000 PairsIt can be allocated by allocating map + entities per pair or by specialized collection that doesn’t box ints
gildor
07/30/2019, 12:35 PM20x performance difference is huge to mecompletely different C++ example with JVM? Or 20 years of JVM with tracing GC (which by definition more efficient way to manage memory than manual alloc or ARC) vs not even releases K/N?
Arkadii Ivanov
07/30/2019, 4:34 PMkpgalligan
07/30/2019, 6:43 PMkpgalligan
07/30/2019, 6:43 PMdata class TestClass(val s:String, val i:Int)
fun runAlloc() {
val start = getTimeMillis()
repeat(repeatCount()){
val t = TestClass("arst", it)
}
println("runAlloc took: ${getTimeMillis() - start}")
}
fun repeatCount() = 100_000_000
kpgalligan
07/30/2019, 6:44 PMkpgalligan
07/30/2019, 6:44 PMclass TestClassSwift {
let s:String
let i:Int
init(s:String, i:Int) {
self.s = s
self.i = i
}
}
kpgalligan
07/30/2019, 6:44 PMlet start = <http://TestClassKt.tm|TestClassKt.tm>()
let repeats = Int(TestClassKt.repeatCount())
for n in 0..<repeats {
autoreleasepool {
let t = TestClassSwift(s: "arst", i: n)
}
}
let total = <http://TestClassKt.tm|TestClassKt.tm>() - start
print("Swift loop: \(total)")
kpgalligan
07/30/2019, 6:44 PMrunAlloc took: 10975
Swift loop: 28604
kpgalligan
07/30/2019, 6:46 PMkpgalligan
07/30/2019, 6:46 PMsksk
07/30/2019, 6:47 PMArkadii Ivanov
07/30/2019, 6:47 PMkpgalligan
07/30/2019, 6:47 PMkpgalligan
07/30/2019, 6:47 PMkpgalligan
07/30/2019, 6:48 PMkpgalligan
07/30/2019, 6:48 PMTestClassKt.runAlloc()
let start = <http://TestClassKt.tm|TestClassKt.tm>()
let repeats = Int(TestClassKt.repeatCount())
for n in 0..<repeats {
autoreleasepool {
let t = TestClassSwift(s: "arst", i: n)
}
}
let total = <http://TestClassKt.tm|TestClassKt.tm>() - start
print("Swift loop: \(total)")
kpgalligan
07/30/2019, 6:49 PMkpgalligan
07/30/2019, 6:49 PMArkadii Ivanov
07/30/2019, 6:49 PMkpgalligan
07/30/2019, 6:49 PMsksk
07/30/2019, 6:50 PMkpgalligan
07/30/2019, 6:50 PMkpgalligan
07/30/2019, 6:50 PMsksk
07/30/2019, 6:50 PMkpgalligan
07/30/2019, 6:50 PMsksk
07/30/2019, 6:50 PMkpgalligan
07/30/2019, 6:51 PMkpgalligan
07/30/2019, 6:51 PMsksk
07/30/2019, 6:51 PMkpgalligan
07/30/2019, 6:51 PMkpgalligan
07/30/2019, 6:51 PMkpgalligan
07/30/2019, 6:52 PMkpgalligan
07/30/2019, 6:52 PMkpgalligan
07/30/2019, 7:01 PMkpgalligan
07/30/2019, 7:01 PMTestClassKt.runAlloc()
let start = <http://TestClassKt.tm|TestClassKt.tm>()
let repeats = Int(TestClassKt.repeatCount())
for n in 0..<repeats {
let t = TestClassSwift(s: "arst", i: n)
}
let total = <http://TestClassKt.tm|TestClassKt.tm>() - start
print("Swift loop: \(total)")
kpgalligan
07/30/2019, 7:01 PMrunAlloc took: 10540
Swift loop: 10685
kpgalligan
07/30/2019, 7:05 PMfun runAlloc() {
val start = getTimeMillis()
val repeats = repeatCount()
for(i in 0 until repeats){
val t = TestClass("arst", i)
}
println("runAlloc took: ${getTimeMillis() - start}")
}
kpgalligan
07/30/2019, 7:05 PMkpgalligan
07/30/2019, 7:06 PMkpgalligan
07/30/2019, 7:06 PMArkadii Ivanov
07/30/2019, 7:06 PMkpgalligan
07/30/2019, 7:10 PMsksk
07/30/2019, 7:11 PMkpgalligan
07/30/2019, 7:12 PMsksk
07/30/2019, 7:12 PMsksk
07/30/2019, 7:13 PMkpgalligan
07/30/2019, 7:13 PMsksk
07/30/2019, 7:13 PMkpgalligan
07/30/2019, 7:13 PMkpgalligan
07/30/2019, 7:14 PMdata class TestClass(val s:String, val i:Int)
kpgalligan
07/30/2019, 7:14 PMArkadii Ivanov
07/30/2019, 7:17 PMkpgalligan
07/30/2019, 7:19 PMsksk
07/30/2019, 7:23 PMsksk
07/30/2019, 7:23 PM4ntoine
08/06/2019, 2:51 PMkpgalligan
08/06/2019, 2:52 PM4ntoine
08/06/2019, 2:53 PMkpgalligan
08/06/2019, 3:00 PM