summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2013-09-03 18:12:31 -0700
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2013-09-03 18:12:31 -0700
commit989c3f85d95a22c95bc7ce936c4bd57ff0608bcd (patch)
tree29056a44bc8b637f31cb5e3f4617e86c57138850 /src
parent3ada7038877928711176da6ebde68528ab5fc39c (diff)
downloadscala-989c3f85d95a22c95bc7ce936c4bd57ff0608bcd.tar.gz
scala-989c3f85d95a22c95bc7ce936c4bd57ff0608bcd.tar.bz2
scala-989c3f85d95a22c95bc7ce936c4bd57ff0608bcd.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.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 cd9f3d23c9..cfa6f927b5 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -3935,13 +3935,13 @@ trait Types extends api.Types { self: SymbolTable =>
// 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
}