在这种情况下,我需要一些解决方案来帮助我了解一些方法:
void myMethod(...)
{
MyObject obj = new MyObject();
// do stuff
}
如果此方法已结束或 obj 是否无法访问(这将表明该方法已结束)。
我正在编写一个小型 Java 代理,我希望有一些技术可以让我确定此方法已结束或 obj 无法访问……在我的情况下,“do stuff”部分根本不使用 obj . 它不会将此变量传递到其他地方或将其添加到某个集合中。
我知道通过 Weak/Soft/Phantom-References 我可以部分实现这一点。如果调用 GC,则通过:
void myMethod(...)
{
MyObject obj = new MyObject();
WeakReference objReference = new WeakReference(obj);
// do stuff
}
我总是可以在不同的地方验证:
if (objReference.get() == null) ...
然而,这只有在 GC 发生时才可能成立。
有没有其他方法可以实现这一目标?例如,一些标记 JVM 可能会放在这个变量上,因为很明显这是一个绝对可以垃圾回收的本地变量......
我不想依赖 ASM - 并为所有这些方法添加一个 try-finally 包装器。希望有一个更微妙的、基于参考的解决方案。