summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/Types.scala
diff options
context:
space:
mode:
authorJames Iry <james.iry@typesafe.com>2013-05-17 13:43:13 -0700
committerJames Iry <james.iry@typesafe.com>2013-06-04 08:19:24 -0700
commit746d85b2e6f8c8dd64016e0b4c0eafe1b808b147 (patch)
treec4ca5072beea82b7730adc754adc518e0d0f26a7 /src/reflect/scala/reflect/internal/Types.scala
parentad63f3630705bd192d9c983399c572b655b3612b (diff)
downloadscala-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/reflect/scala/reflect/internal/Types.scala')
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala4
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
}