2016-02-17 32 views
1

局部變量到底是什麼背後的bug-死存儲機制,一個局部變量??死存儲在Java

有的說死存儲變量的錯誤,當你分配一個值變量,但請不要在代碼塊/功能(我面臨着同類的錯誤)再次使用該變量發生。

void foo(){ 
String str = someObj.getString(); 
//some code but str is never used after assignment... 
} 

但還有一種情況,你會初始化值的變量的情況下,但後來在隨後的指令,你與其他一些值替換變量的值。

List<String> list = new ArrayList<>(); 
list = someobj.getList(); 

在這種情況下,>通過新的ArrayList <創建的對象()是從未使用過,其也被定義爲死存儲。

我們有垃圾收集在java中的機制,它看起來這樣的孤兒對象後,負責以優化內存。 因此,如果垃圾回收處理內存泄漏,那麼爲什麼我們會將這個死存儲的bug報告給局部變量?

能垃圾收集器發揮這個bug什麼作用?

它很清楚,GC是不能夠識別這種死店!但是,爲什麼GC不能識別它?

注:我的意見是,開發人員應避免分配這是從來沒有進一步使用的值這樣的錯誤。但是,這仍然是我懷疑的一個疑問,現在我想要一個結構良好和技術上的答案...;)

+0

歡迎來到Stack Overflow!這個問題似乎對於這個網站來說過於寬泛。我們專注於解決定義明確的技術問題,而不是寫關於Java垃圾收集的散文(除非需要解決提問者發佈的代碼中的特定技術問題)。有關更多信息,請參閱http://stackoverflow.com/help/on-topic。 – ZeroOne

回答

1

GC是完全正確的。這不是一個真正的錯誤。簡而言之,效率低下:無需任何操作就可以消耗CPU時間和內存。

它也可以指示一個錯誤:如果您(或您之前的同事)添加了此指令,但您稍後未使用該變量,則可能意味着您忘記了算法中的某些內容。