既然 Java 的垃圾回收機(jī)制能夠自動的回收內(nèi)存,怎么還會出現(xiàn)內(nèi)存泄漏的情況呢
10 回答

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊
內(nèi)存溢出分兩種情況:一種是棧溢出,比如調(diào)用了一個無限遞歸。還有一種是堆溢出,即new 出來的對象沒有即使銷毀,比如一直new。

慕桂英3389331
TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊
我自己的理解,說的不對的地方歡迎指正。
JDK6中,String的一個方法叫subString,這個是用來生成一個子字符串的。為了更加快速的生成,String有一個構(gòu)造函數(shù),
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
直接指向了原來String的數(shù)組。我們都知道,每次都會生成一個新的常量池中的String字符串。然而這個引用就導(dǎo)致了原來的String無法被回收。因為subString的value會指向他。這里就會導(dǎo)致內(nèi)存泄露。
JVM的確是自己進(jìn)行GC的,不用程序員過多干涉,但是由于一些錯誤操作,導(dǎo)致一些本來不在需要使用的對象仍然有引用,才會導(dǎo)致內(nèi)存泄露的。
添加回答
舉報
0/150
提交
取消