使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告 - 编程入门网
putStream,PrintStream 等),创建并使用完毕后忘记 关闭 close(如清单 16),或者因为异常情况使得关闭 Stream 流的 close 的语句没有被 执行(如清单 17),这些都会导致 Stream 流相关的资源没有被释放,从而产生内存泄漏 。
建议的解决方法: 程序员编码时注意手动释放一些已经明确知道不再使用的对象。最简单的方法就是将其 置为 null,告诉垃圾回收器你已经不再引用他们,从而垃圾回收器可以替你回收这些对象 所占用的内存空间。 使用 Collection 类对象时(如 Hashtable,HashSet,HashMap,Vector 和 ArrayList 等),如果可以,尽量定义其为局部变量,减少外界对其的引用,增大垃圾回收器回收他们 的可能性。 使用 Collection 类对象时(如 Hashtable,HashSet,HashMap,Vector 和 ArrayList 等),注意手动 remove 其中不再使用的元素,减少垃圾对象的残留。 使用事件监听器时(event listener),记住将不再需要监听的对象从监听列表中解除 (remove)。 使用 Stream 流时,一定要注意创建成功的所有 Stream 流一定要在使用完毕后 close 关闭,否则资源无法被释放。 在 try / catch 语句中,添加 finally 声明,对 try 中某些可能因为异常而没释放的 资源进行释放。 在 class 中添加 finalize() 方法,手动对某些资源进行垃圾回收。 可以使用一些可以检测内存泄漏的工具,如 Optimizeit Profiler,JProbe Profiler, JinSight, Rational 公司的 Purify 等,来帮助找出代码中内存泄漏的错误。 其它技巧 使用 Iterator 时,一定要先调用 hasNext() 后,再调用 next(),而且不要在一个 Iterator 的 hasNext() 成功后,去调用另外一个 Iterator 的 next(),如清单 18 。 清单 18. 使用 Iterator 出错
使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(10)时间:2011-05-07 IBM 丁钦浩注意 switch 语句中是否缺少 break 。有的时候程序员有意让多个 case 语句在一次执 行,但是有的时候却是忘写 break,导致发生了意想不到的结果,如清单 19 。 清单 19. switch 语句中缺少 break
注意避免恒正确或恒错误的条件,如清单 20 。 清单 20. 常见的恒正确或恒错误的条件
注意在 if 语句中是否少了 else 分支,如清单 21。 清单 21. if 语句中少了 else 分支
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |