Re: help with weak references
Jasper-M <[email protected]> Mon, 4 Jan 2016 07:08:05 -0800 (PST)
| Newsgroups | gmane.comp.lang.scala |
|---|---|
| Message-ID | <[email protected]> |
Two things: - I'm not sure but I don't think redefining x is enough to convince the jvm that the first reference is unreachable, - val wr still refers to an object that refers to the list (the val `a` of case class WR). Op maandag 4 januari 2016 12:02:27 UTC+1 schreef [email protected]: > > Weak references don't seem to be eagerly collected as the following script > illustrates. Why? > > --------------------- > Welcome to Scala version 2.11.4 (Java HotSpot(TM) 64-Bit Server VM, Java > 1.8.0_60). > Type in expressions to have them evaluated. > Type :help for more information. > > scala> import scala.ref.WeakReference > import scala.ref.WeakReference > > scala> val rq = new scala.ref.ReferenceQueue[List[Int]] > rq: scala.ref.ReferenceQueue[List[Int]] = > java.lang.ref.ReferenceQueue@ba2f4ec > > scala> case class WR(a: List[Int]) { val wr = new WeakReference(a, rq)} > defined class WR > > scala> val wr = WR((0 until 5).toList) > wr: WR = WR(List(0, 1, 2, 3, 4)) > > scala> val x = wr.wr.get > x: Option[List[Int]] = Some(List(0, 1, 2, 3, 4)) > > scala> val x = 3 // re-define x > x: Int = 3 > > scala> System.gc() > > scala> val x = wr.wr.get > x: Option[List[Int]] = Some(List(0, 1, 2, 3, 4)) // <<------ should have > been None > > scala> > > -- You received this message because you are subscribed to the Google Groups "scala-language" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.