2
A
답변
5
은 그냥 그것을 확인하자하지 않습니다 (물론, 마이크로 벤치 마크 결과는 항상 에누리주의해야한다). Scalameter를 사용
:
// build.sbt
scalaVersion := "2.11.4"
libraryDependencies ++= Seq(
"com.storm-enroute" %% "scalameter" % "0.6"
)
// src/main/scala/main.scala
import org.scalameter.api._
import scala.collection.immutable
import scala.collection.mutable
object RangeBenchmark extends PerformanceTest.Quickbenchmark {
val sizes = Gen.range("size")(100000, 500000, 100000)
val immutableMaps = for {
size <- sizes
} yield immutable.Map((0 until size).map(n => n -> (size-n)).toSeq: _*)
val mutableMaps = for {
size <- sizes
} yield mutable.Map((0 until size).map(n => n -> (size-n)).toSeq: _*)
performance of "immutable.Map" in {
measure method "map" in {
using(immutableMaps) in { m => m.map { case (k, v) => (k+1, v+1) } }
}
}
performance of "mutable.Map" in {
measure method "map" in {
using(mutableMaps) in { m => m.map { case (k, v) => (k+1, v+1) } }
}
}
}
이 실행 (
sbt run
) :
... lots of output ...
::Benchmark immutable.Map.map::
cores: 4
jvm-name: OpenJDK 64-Bit Server VM
jvm-vendor: Oracle Corporation
jvm-version: 24.65-b04
os-arch: amd64
os-name: Linux
Parameters(size -> 100000): 40.95331
Parameters(size -> 200000): 90.12223
Parameters(size -> 300000): 139.716564
Parameters(size -> 400000): 208.114459
Parameters(size -> 500000): 254.876849
... lots of output ...
::Benchmark mutable.Map.map::
cores: 4
jvm-name: OpenJDK 64-Bit Server VM
jvm-vendor: Oracle Corporation
jvm-version: 24.65-b04
os-arch: amd64
os-name: Linux
Parameters(size -> 100000): 24.004582
Parameters(size -> 200000): 52.941946
Parameters(size -> 300000): 66.036803
Parameters(size -> 400000): 113.575799
Parameters(size -> 500000): 119.544183
은 분명히, 변경 가능한 맵은 거의 정확하게 두 배 빠르다. 내 생각 엔지도 Builder
s의 차이 때문에이 문제가 발생합니다. 추가 할 수있는 각 요소로 업데이트되는 불변지도 작성기는 var
이며 변경 가능한지도 작성기는 변경 가능한지도 자체입니다. 결과적으로 맵 크기가 클 경우 불변 맵 빌더가 더 많은 할당을 발생시킵니다. 이것은 정말로 야생의 추측입니다. 그래서 더 많은 지식을 가진 사람이 정확한 이유를 제시 할 것입니다.
관련 문제
- 1. 스칼라의 Map에서`map` 함수 사용
- 2. 스칼라의 파이핑 함수
- 3. 스칼라의 함수 작성
- 4. 스칼라의 함수 체이닝
- 5. 스칼라의 목록에서 모든 함수 적용
- 6. CouchDB의 map-reduce 함수
- 7. erlang리스트 사용법 : map 함수
- 8. 멤버 함수 포인터의 std :: map?
- 9. 함수 포인터를 사용하는 std :: map
- 10. 하스켈 바이너리 트리 함수 (map)
- 11. iskell에서의 평등 한`map` 함수?
- 12. jquery map 및 Date() 함수
- 13. 스칼라의 다중 키 맵
- 14. 지도 스칼라의 다른 유형
- 15. 고차 주문 스칼라의 Functor
- 16. 함수 종속성이 포함 된 스칼라의 일반적인 프로그래밍 및 로테이션 바나나
- 17. 데이터가 스칼라의 테이블에로드되지 않습니다.
- 18. 스칼라의 클래스 별칭
- 19. 스칼라의 간단한 행렬 계산
- 20. 스칼라의 전역 변수
- 21. 스칼라의 객체 용 모키토
- 22. 스칼라의 비트 스트림 라이브러리
- 23. 지도의 목록 표현에서 스칼라의 실제지도로
- 24. Sqoop 함수 '--map-column-hive'가 무시됩니다.
- 25. std :: map, std :: equal_range 및 비교 함수
- 26. couchdb map-reduce 함수 버전 지정
- 27. std :: map of 템플릿 멤버 함수 포인터
- 28. C++ std :: map 키 정렬 비교 함수?
- 29. scala map, filter, grouby는 함수 또는 메소드입니다.
- 30. Visual Studio MAP 파일의 잘못된 함수 주소
왜 측정하지 않으시겠습니까? – rightfold