diff options
author | James Iry <james.iry@typesafe.com> | 2013-05-17 13:43:13 -0700 |
---|---|---|
committer | James Iry <james.iry@typesafe.com> | 2013-06-04 08:19:24 -0700 |
commit | 746d85b2e6f8c8dd64016e0b4c0eafe1b808b147 (patch) | |
tree | c4ca5072beea82b7730adc754adc518e0d0f26a7 /src | |
parent | ad63f3630705bd192d9c983399c572b655b3612b (diff) | |
download | scala-746d85b2e6f8c8dd64016e0b4c0eafe1b808b147.tar.gz scala-746d85b2e6f8c8dd64016e0b4c0eafe1b808b147.tar.bz2 scala-746d85b2e6f8c8dd64016e0b4c0eafe1b808b147.zip |
SI-7149 Use a WeakHashSet for type uniqueness
Currently type uniqueness is done via a HashSet[Type], but
that means the Types live through an entire compile session, even
ones that are used once. The result is a huge amount of unnecessarily
retained memory. This commit uses a WeakHashSet instead so that Types
and their WeakReferences are cleaned up when no longer in use.
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index 00a929003e..a435292185 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -3668,13 +3668,13 @@ trait Types // Hash consing -------------------------------------------------------------- private val initialUniquesCapacity = 4096 - private var uniques: util.HashSet[Type] = _ + private var uniques: util.WeakHashSet[Type] = _ private var uniqueRunId = NoRunId protected def unique[T <: Type](tp: T): T = { if (Statistics.canEnable) Statistics.incCounter(rawTypeCount) if (uniqueRunId != currentRunId) { - uniques = util.HashSet[Type]("uniques", initialUniquesCapacity) + uniques = util.WeakHashSet[Type](initialUniquesCapacity) perRunCaches.recordCache(uniques) uniqueRunId = currentRunId } |