TL;博士:在Java中,這是更好的,容器對象的重用或每次創建對象,讓垃圾回收器做Java:重用vs重新分配對容器對象的引用?
我處理與Java數據量巨大的工作,我有以下地方頻繁代碼結構的類型: -
版本1:
for(...){//outer loop
HashSet<Integer> test = new HashSet<>(); //Some container
for(...){
//Inner loop working on the above container Data Structure
}
//More operation on the container defined above
}//Outer loop ends
在這裏,我每次都在一個循環中分配新的內存和分配空MEMOR之前做內/外循環的一些操作再次。
現在我擔心Java中的內存泄漏。我知道,Java有一個相當不錯的垃圾收集器,但不是依靠我應該修改我的代碼如下: -
版本2:
HashSet<Integer> test = null;
for(...){//outer loop
if(test == null){
test = new HashSet<>(); //Some container
}else{
test.clear()
}
for(...){
//Inner loop working on the above container Data Structure
}
//More operation on the container defined above
}//Outer loop ends
我有三個問題: -
- 哪個表現會更好,還是沒有確切的答案。
- 第二個版本會有更多的時間複雜度嗎?換句話說,複雜度爲O(n)的clear()函數O(1)。我在javadoc中沒有任何東西。
- 這種模式很常見,哪個版本更值得推薦?
'clear'可能會稍微快一點(上次我檢查了10/15%)。最好的方法是用你的數據測試兩種方法。在正常計劃中,這不會成爲瓶頸。 – assylias
@assylias我能想到的一個原因是,內存必須每次調整大小如果我每次都分配新內存。但是空間複雜性呢?如果速度不是問題,將會對內存佔用產生重大影響? –
@TagirValeev對不起,我在那裏很不在乎。我打算空檢查,如果容器從來沒有被初始化,我會給我的內存,否則我只會清理並重用我得到的空間 –