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.