使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告
2010-01-11 00:00:00 来源:WEB开发网清单 12 除数为 0
int num = 0;
…
int a = 5 / num;
总结:导致除 0 错误的主要原因是使用变量作为除数,并且程序员在写除法语句时,以为变量值到此已经被改变(不是 0),但是实际上可能某条不被注意的语句路径导致除数为 0,从而造成了错误。
建议的解决方法:做除法前,一定不能将除数直接写为 0 ;如果除数为变量,而且该变量值在进行除法前经过了很多运算,导致不能确定在被除前是否为 0,则在除法前,先对除数变量进行是否为 0 的判断,并对除数为 0 的情况做特殊处理。
内存泄漏
这是报出的ERROR23错误模式。内存泄漏的后果非常严重,即使每次运行只有少量内存泄漏,但是长期运行之后,系统仍然会面临彻底崩溃的危险。
在 C/C++ 中,内存泄漏(Memory Leak)一直是程序员特别头疼的问题,因为它出错时的表现特征经常很不稳定(比如:错误表象处不唯一,出错频率不定等),而且出现问题的表象处经常与内存泄漏错误代码相隔甚远,所以很难被定位查出。在 Java 中,垃圾回收器 (Garbage Collection,GC) 的出现帮助程序员实现了自动管理内存的回收,所以很多程序员认为 Java 不存在内存泄漏问题,其实不然,垃圾回收器并不能解决所有的内存泄漏问题,所以 Java 也存在内存泄漏,只是表现与 C/C++ 不同。
为什么 Java 会出现内存泄漏呢?因为垃圾回收器只回收那些不再被引用的对象。但是有些对象的的确确是被引用的(可达的),但是却无用的(程序以后不再使用这些对象),这时垃圾回收器不会回收这些对象,从而导致了内存泄漏,抛出异常 java.lang.OutOfMemoryError。以下是导致内存泄漏的常见的例子(其中某些例子 BEAM 很难查出,这里列出只是为了给读者提供一个反例进行学习)。
更多精彩
赞助商链接