From fbae0107fc34567853338da78d00e7e4c6cc73c7 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 10 Feb 2014 15:53:29 +0100 Subject: [PATCH] spare some memory in vcs log --- .../src/com/intellij/vcs/log/data/RefsModel.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java index 8f79a75076a4..98d4fe2c09bb 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java @@ -2,10 +2,12 @@ package com.intellij.vcs.log.data; import com.intellij.openapi.util.Condition; import com.intellij.util.NotNullFunction; +import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsRef; +import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -19,7 +21,7 @@ public class RefsModel { @NotNull private final Collection myBranches; @NotNull private final MultiMap myRefsToHashes; - @NotNull private final MultiMap myRefsToIndices; + @NotNull private final TIntObjectHashMap> myRefsToIndices; @NotNull private final NotNullFunction myIndexGetter; public RefsModel(@NotNull Collection allRefs, @NotNull NotNullFunction indexGetter) { @@ -36,17 +38,20 @@ public class RefsModel { } @NotNull - private MultiMap prepareRefsToIndicesMap(@NotNull Collection refs) { - MultiMap map = MultiMap.create(); + private TIntObjectHashMap> prepareRefsToIndicesMap(@NotNull Collection refs) { + TIntObjectHashMap> map = new TIntObjectHashMap>(); for (VcsRef ref : refs) { - map.putValue(myIndexGetter.fun(ref.getCommitHash()), ref); + int index = myIndexGetter.fun(ref.getCommitHash()); + SmartList list = map.get(index); + if (list == null) map.put(index, list = new SmartList()); + list.add(ref); } return map; } @NotNull private static MultiMap prepareRefsMap(@NotNull Collection refs) { - MultiMap map = MultiMap.create(); + MultiMap map = MultiMap.createSmartList(); for (VcsRef ref : refs) { map.putValue(ref.getCommitHash(), ref); }