2017-02-20 34 views
-1

以下兩個實現(HashMap對象的位置已被更改),哪一個佔用較少的內存,以及何時釋放內存?Java中的實例變量與方法變量的內存利用率

public class ValidateA implements SessionBean { 

    private HashMap auditData = null; 

    private void validater (String Record) { 
     this.auditData = null; 
     //operation this.auditData = ... 
    } 
} 

public class ValidateB implements SessionBean { 

    private void validater (String Record) { 
     HashMap auditData = null; 
     //operation auditData = .. 
    } 
} 

感謝

回答

1

使用將是大致相同的內存(準確,如果你只有在應用程序的ValidateA一個實例,一個線程相同)。

auditData參考本身存儲器將被釋放:

  • ValidateA,當ValidateA實例本身變得符合垃圾收集)
  • ValidateB,在方法結束時

內存HashMap實例將被釋放(有資格GC),當它不再與任何地方引用的 - 假設你有除了auditData到地圖上的任何其它引用:

  • ValidateA,當你設置auditData = null,當你運行再次方法(覆蓋以前auditData),或在ValidateA實例本身就符合GC
  • ValidateB,在方法的回覆
+0

謝謝你的結束。其實,邏輯位複雜,我並沒有完全意識到這一點。我問過這個問題,因爲在完成之後我們有時會發現內存異常。 目前我們正在使用像ValidateA這樣的實現,但是從你的回覆中,如果我們使用ValidateB,HashMap將在方法本身之後準備好GC,並且由於我們在類內部有更多的方法,所以我們不必等到ValidateA本身有資格參加GC。 –