【发布时间】:2018-01-19 11:39:15
【问题描述】:
Java concurrency in practice一书中,在谈到发布对象的方式时,有一种机制是发布内部类实例,而不是安全因为
内部类实例包含对封闭类的隐藏引用 实例
我想知道如果你不能通过内部类实例获取外部类实例,为什么会不安全,只是因为它会影响 GC?我很困惑,是否有办法获取外部类实例,比如反射?
【问题讨论】:
-
那本书有多久了?理论上,内部类引用了外部类(或封闭类),而外部类引用了内部类 - 这意味着对于 GC(可能),两者都永远无法访问。跨度>
-
这本书说这样做很糟糕,使对象逃逸,而且我认为这不仅仅是关于 GC,所以我想知道如果我已经可以通过反射访问外部对象有一个内部对象。
-
@ElliottFrisch 如果 Java 像某些编程语言一样使用 ARC(自动引用计数),你是对的,但 JVM 使用可达性分析,因此两者都可以从它们无法访问的情况下释放出来。跨度>
标签: java reflection publish inner-classes outer-classes