WeakReference和Scala REPL

Nic*_*las 4 console scala weak-references

我想玩scala.ref.WeakReference.但是,在尝试实现大事之前,我想尝试检查scala控制台中的行为.我尝试了一些但我无法获得被取消引用的对象.这是我的尝试之一:

> class A
defined class A

> class B(var value: A)
defined class B

> new B(new A)
res0: B = B@c8aeb3

> new scala.ref.WeakReference(res0.value)
res1: scala.ref.WeakReference[A] = scala.ref.WeakReferenceWithWrapper@16a5d72

> res0.value = new A

> res1.get // Here I hope to get None
res3: Option[A] = Some(A@135707c)
Run Code Online (Sandbox Code Playgroud)

另一个尝试是由下面的oxbow_lakes给出的.

我也尝试过徒劳地显式运行垃圾收集器(调用java.lang.System.gc).

有没有办法取消引用的内容res1

Deb*_*ski 5

Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> class A  
defined class A

scala> class B(var value: A)
defined class B

scala> new B(new A)
res0: B = B@4223d9b

scala> new scala.ref.WeakReference(res0.value)
res1: scala.ref.WeakReference[A] = scala.ref.WeakReferenceWithWrapper@20eb607d

scala> res0.value = new A

scala> System gc

scala> res1 get
res3: Option[A] = None
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果我在没有显式的情况下将其作为脚本运行System gc,它也不会删除引用.所以对我而言,这不是REPL的问题,而只是弱引用和垃圾收集器的工作方式.