2011-04-12 2 views
0

잠재적으로 멀티 스레드 환경을 가정합니다. 나는 (가치) 캐싱과 함께지도를 사용하고 싶다. 왜 내가 더 선호 하나?collection.immutable.Map [K, SoftReference [V]] over Google의 MapMaker?

collection.immutable.Map.empty[ K, SoftReference[ V ]] 
new com.google.common.collect.MapMaker.softValues.makeMap[ K, V ] 

맵은 STM ref에 저장 될 것이므로 불변 (immutable)은 곧장 앞으로 나아질 것입니다. 또한 KLong 일 가능성이 높으므로 collection.immutable.LongMap을 사용할 수 있습니다.

여기에 Google 모음을 사용하면 어떤 이점이 있습니까? 성능과 공간이 현명합니까?

+1

이 글을 다시 읽으면 분명히 옵션이 아닙니다. "지도는 STM 심판에 저장 될 것이므로 불변은 곧장 앞으로 나아질 것입니다." - 괜찮지는 않지만 실제로 ** 필수 **이며,'MapMaker'는 변경할 수있는 java.util.concurrent.ConcurrentMap을 반환하므로 여기서 작동하지 않습니다. 나는'com.google.common.collect.ImmutableMap'과 같은 불변의 맵을 가질 수 있다고 생각하면서 속 였지만'MapMaper'는 그것을 지원하지 않는 것 같습니다. –

답변

0

IMO Google의 접근 방식의 가장 큰 이점은 결과 API가 더 깨끗하다는 것입니다. 즉, 관리해야하는 것이 아니라 SoftReference이 삽입되어 널 검사됩니다. 그러나 보장 된 불변성과 네이티브 Scala API는 다른 컬럼에 표시되어 있습니다.

mixin (필자가 이미 표준 라이브러리에 가지고있는 MultiMap과 유사하게, 불행하게도 변경 가능)을 작성하는 실험을하고 싶습니다.

+0

괜찮 았어.하지만 어쨌든 API는 내 심판 관리인 한 곳에서 숨겨져있다. 게다가, 나는 collection.immutable.Map을 가진 표준 API를 가질 것이고, 나는 다른 라이브러리에 대한 의존성을 더 남겨 둘 수있다. 그래서 나는 스칼라 자신의 수업에 충실 할거라고 생각한다. - 내 다른 코멘트도 보아라. –