內存泄漏典型例子


Vector v = new  Vector( 10 );  
 for  ( int  i = 1 ;i < 100 ; i ++ ){  
 Object o = new  Object();  
 v.add(o);  
 o = null ;  
 }
在這個例子中,代碼棧中存在Vector 對象的引用 v 和 Object 對象的引用 o 。
在 For 循環中,我們不斷的生成新的對象,然后將其添加到 Vector 對象中,之后將 o 引用置空。問題是當 o 引用被置空后,
如果發生 GC ,
我們創建的 Object 對象是否能夠被 GC 回收呢?
答案是否定的。
因為, GC 在跟蹤代碼棧中的引用時,
會發現 v 引用,而繼續往下跟蹤,就會發現 v 引用指向的內存空間中又存在指向 Object 對象的引用。也就是說盡管 o 引用已經被置空,
但是 Object 對象仍然存在其他的引用,是可以被訪問到的,所以 GC 無法將其釋放掉。
如果在此循環之后, Object 對象對程序已經沒有任何作用,
那么我們就認為此 Java 程序發生了內存泄漏。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM