1
一個內部類的實例獲得一個外部類的實例在書中Java併發在實踐中,當談論的方式來發布對象,還有一個機制發佈一個內部類實例,它是不是安全的,因爲如何在Java
內部類實例包含一個隱藏的參考封閉 實例
我不知道如何來是不安全的,如果你不能得到外部類插件通過一個內部類實例,僅僅因爲它會影響GC?我很困惑,是否有辦法獲得外部類實例,如反射?
一個內部類的實例獲得一個外部類的實例在書中Java併發在實踐中,當談論的方式來發布對象,還有一個機制發佈一個內部類實例,它是不是安全的,因爲如何在Java
內部類實例包含一個隱藏的參考封閉 實例
我不知道如何來是不安全的,如果你不能得到外部類插件通過一個內部類實例,僅僅因爲它會影響GC?我很困惑,是否有辦法獲得外部類實例,如反射?
它不會影響GC像你想象的。 JVM使用可達性分析,而不是自動引用計數,所以當它們都不能從起始主對象圖中訪問時,它們都可以被釋放。
這是不安全的 - 我猜他們意味着通過發佈作爲序列化和發送 - ,因爲通過引用外部實例也將被序列化,導致更大的消息和或序列化異常(如果它包含某些非瞬態的可序列化成員或本身不可序列化)。
我不知道外部對象引用名稱以任何方式標準化,通過反射所以訪問它們需要一些試驗和錯誤(顯然測試)。
幾歲那本書嗎?理論上講,內部類有一個對外部(或封閉類)的引用,而外部類對內部類有引用 - 這意味着對於GC(也許),兩者都是**永遠不可能**。 –
書說,這是不好的話,製造的物體逃脫,我想這是不是唯一的GC,所以我不知道我是否能夠通過反射來訪問外部對象,如果我有一個內部對象。 – liuxl
@ElliottFrisch的情況下,Java中使用ARC(自動引用計數)像一些編程語言做的,你是對的,但JVM使用可達性分析,這樣既可以被釋放,他們是不可達。 –