情景:
我有一些代码可以改变对象和其他没有的代码,即它将它使用的对象视为不可变的。 但是在具有并行工作任务的设置中,只有在确保某些对象不会从第三方或库代码中修改时才能可靠地工作,如果在我的代码范围之外存在引用,则可能会发生这种情况。 一种可能性是始终传递副本而不是原始对象。但有时人们可以节省记忆和时间,如果一个人只知道没有其他参考物在其他地方挥之不去。
这是一个伪编码的通用“冻结”方法,它将获取一个对象并返回一个相同的“不可变”的方法:
public <T> T freeze(T x) {
if immutable anyway then return x
else if "not referenced in other objects" then return x
else if x clonable then return clone of x
else if x serializable then return serialized/deserialized x
else ....
}
我正在寻找的是“未在其他对象中引用”部分 有什么建议吗?
答案 0 :(得分:1)
您可以跟踪对象的引用计数。
我不相信Java中有什么可以做你想要的。 GC可以用于这样的事情,但触发Full GC来执行此检查不是一个好主意。