diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-09-24 14:31:17 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-09-24 14:31:17 +0200 |
commit | b403c1d7524ccdfc3455b5bc5d5363fdd9c82bec (patch) | |
tree | 2baee347799ec76cd51fbb8ff8f89abf20249b6f /test/pending/run/reflection-mem-eval.scala | |
parent | 291d1f033a790e97298210de29f09a9796406ae3 (diff) | |
download | scala-b403c1d7524ccdfc3455b5bc5d5363fdd9c82bec.tar.gz scala-b403c1d7524ccdfc3455b5bc5d5363fdd9c82bec.tar.bz2 scala-b403c1d7524ccdfc3455b5bc5d5363fdd9c82bec.zip |
SI-6412 alleviates leaks in toolboxes
Turns importer caches into fully weak hash maps, and also applies
manual cleanup to toolboxes every time they are used.
It's not enough, because reflection-mem-typecheck test is still leaking
at a rate of ~100kb per typecheck, but it's much better than it was before.
We'll fix the rest later, after 2.10.0-final.
For more information, see https://issues.scala-lang.org/browse/SI-6412 and
http://groups.google.com/group/scala-internals/browse_thread/thread/eabcf3d406dab8b2
Diffstat (limited to 'test/pending/run/reflection-mem-eval.scala')
-rw-r--r-- | test/pending/run/reflection-mem-eval.scala | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/pending/run/reflection-mem-eval.scala b/test/pending/run/reflection-mem-eval.scala new file mode 100644 index 0000000000..9045c44cd6 --- /dev/null +++ b/test/pending/run/reflection-mem-eval.scala @@ -0,0 +1,26 @@ +import scala.tools.partest.MemoryTest + +trait A { type T <: A } +trait B { type T <: B } + +object Test extends MemoryTest { + lazy val tb = { + import scala.reflect.runtime.universe._ + import scala.reflect.runtime.{currentMirror => cm} + import scala.tools.reflect.ToolBox + cm.mkToolBox() + } + + override def maxDelta = 10 + override def calcsPerIter = 3 + override def calc() { + var snippet = """ + trait A { type T <: A } + trait B { type T <: B } + def foo[T](x: List[T]) = x + foo(List(new A {}, new B {})) + """.trim + snippet = snippet + "\n" + (List.fill(50)(snippet.split("\n").last) mkString "\n") + tb.eval(tb.parse(snippet)) + } +}
\ No newline at end of file |