2011-03-21 29 views
-1

場景:找到引用數爲Java對象或檢查它是否被引用別處

我有變異對象的代碼,並且不對,即它把它與作爲不可變對象的其他代碼。 但是在具有並行工作任務的設置中,只有在可以確保某些對象不會被第三方或庫代碼修改時才能可靠地工作,這些代碼可能在我的代碼範圍之外有引用時發生。 一種可能性是始終傳遞副本而不是原始對象。但是,如果人們知道其他地方沒有其他引用其他物體的引用,那麼有時可以節省內存和時間。

這裏是一個僞編碼,將採取一個對象,並返回一個相同的「不可改變的」一個普通的「凍結」的方法:

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 .... 
} 

我所尋找的是「沒有其他對象引用」部分。
有什麼建議嗎?

回答

1

您可以跟蹤對象的引用計數。

我不相信Java中有什麼可以做你想做的事情。 GC可以用於這樣的事情,但觸發Full GC執行此檢查並不是一個好主意。

相關問題