我可以在Nashorn中为JavaScript对象创建WeakReference吗?

时间:2016-09-14 03:08:34

标签: javascript java weak-references nashorn

我试图在我在Nashorn中运行的JavaScript程序中使用弱引用。看起来这应该是可能的,因为我可以实例化一个Java WeakReference对象,将JavaScript对象传递给它。但似乎这不起作用。

// weaknash.js
var WeakRef = Java.type("java.lang.ref.WeakReference");
var obj = {p: "abc"};
var wr = new WeakRef(obj);
print(obj);      // should print object
print(wr.get()); // should print object
Packages.java.lang.System.gc();
print(obj);      // should print object
print(wr.get()); // should print object
obj = null;
Packages.java.lang.System.gc();
print(obj);      // should print null
print(wr.get()); // should print null

当我运行它时,我得到以下输出:

$ jjs weaknash.js 
[object Object]
[object Object]
[object Object]
null
null
null

我希望输出如下:

$ jjs weaknash.js 
[object Object]
[object Object]
[object Object]
[object Object]
null
null

问题是即使仍有obj仍包含对象的引用,但wr引用的对象由垃圾收集器收集。尽管如此,对象obj仍然可用。

如何让WeakReference正确跟踪Nashorn中的JavaScript对象?

0 个答案:

没有答案