WEB开发网
开发学院软件开发Java 使用 IBM 静态工具优化 Java 代码,第 2 部分: 分... 阅读

使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: 清单 13. 内存泄漏的 HashtablepublicclassHashtableLeakDemo{staticHashtable<Integer,String>names=newHashtable<Integer,String>();voidleakingHash(i

清单 13. 内存泄漏的 Hashtable

 public class HashtableLeakDemo 
 { 
 
 static Hashtable<Integer, String> names = new Hashtable<Integer, String>(); 
 
 void leakingHash( int num ) { 
 for( int i = 0; i < num; i++ ) { 
 names.put( new Integer(i) , "developerWorks"); 
 } 
 // 接下来是继续对 names 哈希表进行的操作,但是忘了移除其中的表项 
 } 
 } 

leakingHash 会往 Hashtable 中不停地加入元素,但是却没有相应的移除动作(remove),而且 static 的 Hashtable 永远都会贮存在内存中,这样必将导致 Hashtable 越来越大,最终内存泄漏。

清单 14. 内存泄漏的 Vector

 public class VectorLeakDemo 
 { 
 
 static Vector<String> v = new Vector<String>(); 
 
 void leakingVector( int num ) { 
 for( int i = 0; i < num; i++ ) { 
 v.add( String.valueOf(i) ); 
 } 
 // 虽然进行了 remove,但是却没有移除干净 
 for( int i = num - 1; i > 0; i-- ) { 
 v.remove( i ); 
 } 
 } 
 } 

每次调用 leakingVector 都会少 remove 一个 String 元素,如果 Vector 中的元素不是 String,而是数据库中一些非常大的记录(record),那么不停调用 leakingVector 将很快导致内存耗光。

清单 15. 内存泄漏的 Buffer

上一页  4 5 6 7 8 9 10  下一页

Tags:使用 IBM 静态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接