對(duì)象清空的問(wèn)題懸賞:10 發(fā)布時(shí)間:2008-11-11 提問(wèn)人:starxing (初級(jí)程序員)我定義一個(gè)Vector ,當(dāng)我不在使用這個(gè)Vector時(shí)
下面那個(gè)方法好,為啥? 1。 vector.clear(); vector = null; 2. vector = null; 問(wèn)題補(bǔ)充 我知道這個(gè)方法。 我的意思是說(shuō)在vector =null,之間有沒(méi)有必要把他給clear(). 采納的答案2008-11-11 上一站,火星 (資深程序員)大多數(shù)情況下如果我們只是不再使用對(duì)象是,可以不管,交給java的垃圾回收機(jī)制來(lái)釋放對(duì)象,當(dāng)然,如果顯示的聲明ector = null,就是明確的告訴垃圾回收機(jī)制,我不用了,你可以回收了,vector.clear()不需要。用clear方法的情況是你還想用clear只是想讓它的大小為0的時(shí)候。
提問(wèn)者對(duì)于答案的評(píng)價(jià): 明白了, 其他回答
public void clear() {
removeAllElements();
}
public synchronized void removeAllElements() {
modCount++;
// Let gc do its work
for (int i = 0; i < elementCount; i++)
elementData[i] = null;
elementCount = 0;
}
laiseeme (初級(jí)程序員) 2008-11-11
看樣子好像是用一個(gè)數(shù)組
clear把里面所有的元素都清空 而且設(shè)置size=0 vector = null; 后 系統(tǒng)在運(yùn)行g(shù)c后就會(huì)把vector回收 是這么個(gè)意思不? 其實(shí)可以這么理解 如果你以后還有用這個(gè)vector 那就把他clear 如果你不用了 直接回收 都不用clear 直接=null 不是很明白 聽(tīng)大牛解釋解釋 laiseeme (初級(jí)程序員) 2008-11-11
JAVA還用你這么干……那他干脆和C++一樣給你個(gè)析構(gòu)方法不就得了……
你看那些大師的源代碼哪個(gè)用了XX=NULL來(lái)釋放內(nèi)存……反正我是沒(méi)見(jiàn)過(guò)這種寫法。 按照thinking in java中的觀點(diǎn),把內(nèi)存回收的任務(wù)交給回收機(jī)制,回收機(jī)制我們用任何手段都是無(wú)法控制的,當(dāng)然某些資源如果需要釋放,如IO、數(shù)據(jù)庫(kù)連接,這些是需要自己寫釋放資源的代碼的。 tianhaoleng (初級(jí)程序員) 2008-11-11
當(dāng)然需要用=Null來(lái)釋放。不然就會(huì)很容易造成Java內(nèi)存泄漏。Java只會(huì)回收無(wú)任何引用的對(duì)象。如果對(duì)象有引用存在,那么就不會(huì)被回收。所以在對(duì)象用完后,需要用引用為Null的方法銷毀。當(dāng)然,很多時(shí)候我們建立的臨時(shí)變量在生命周期完成后被自動(dòng)銷毀了,但是還有一些全局的引用存在,必須手動(dòng)銷毀。
魔力貓咪 (初級(jí)程序員) 2008-11-11
沒(méi)有必要把它c(diǎn)lear()
jones (架構(gòu)師) 2008-11-11
必要的時(shí)候可以vector = null,不過(guò)通常也不用,現(xiàn)代的JVM GC已經(jīng)很強(qiáng)了
jones (架構(gòu)師) 2008-11-11
引用
我的意思是說(shuō)在vector =null,之間有沒(méi)有必要把他給clear().
把vector =null就可以了,系統(tǒng)會(huì)自動(dòng)回收的,不用調(diào)用clear(); hanhg (中級(jí)程序員) 2008-11-11
非常明確的說(shuō)明是,沒(méi)有必要clear
|
|
|