java - NullPointerExceptions 和内存泄漏的 FindBugs

标签 java memory-leaks nullpointerexception findbugs

我正在研究使用 FindBugs 来帮助查找代码中的明显错误。

我知道任何工具在某些方面都有局限性,但我想查找的两个最普遍的错误是:

  • NullPointerExceptions;和
  • Java 内存泄漏

FindBugs 是否有能力找到这些?我敢肯定,永远无法保证发现所有错误,但如果 FindBugs 能够为我在 Eclipse 中检测到其中的一小部分,那就太好了。

我一直在阅读 HTML manual并且还没有遇到任何提及这些功能的内容。

最佳答案

FindBugs 使用静态分析来查找 Java 代码中的错误。您可以获得有关改进代码的好提示,但由于这两种问题的运行时性质,它不能保证您会检测到内存泄漏或 NullPointerExceptions。当然,您会得到很好的提示,避免可能导致内存泄漏和空指针的不良做法,但这只是一个起点。

同时检查 this question关于在 Java 中查找内存泄漏。

以下 Findbugs 检查有助于避免 NullPointerException:

  • NP:具有 boolean 返回类型的方法返回显式 null
  • NP:克隆方法可能返回 null
  • NP:equals() 方法不检查空参数
  • NP:toString 方法可能返回 null
  • NP:空指针解引用
  • NP:异常路径上的方法中的空指针取消引用
  • NP:方法不检查空参数
  • NP:close() 在始终为 null 的值上调用
  • NP:空值保证被解引用
  • NP:值为 null 并保证在异常路径上取消引用
  • NP:方法调用将 null 传递给非 null 参数
  • NP:方法可能返回 null,但被声明为@NonNull
  • NP:检查一个已知的空值,看它是否是一个类型的实例
  • NP:可能的空指针解引用
  • NP:异常路径上的方法中可能存在空指针取消引用
  • NP:方法调用为非空参数传递空值
  • NP:方法调用为非空参数传递空值
  • NP:非虚方法调用为非空参数传递空值
  • NP:将空值存储到带注释的 NonNull 字段中
  • NP:读未写字段
  • NP:取消引用 readLine() 的结果而不进行 nullcheck
  • NP:立即解引用 readLine() 的结果
  • NP:负载已知空值
  • NP:由于被调用方法的返回值,可能会取消引用空指针
  • NP:在可能不可行的分支上可能取消引用空指针
  • NP:参数必须为非空但标记为可为空
  • NP:读取不成文的公共(public)或保护领域

一些有助于改进代码的内存问题检查是

  • Dm:方法调用低效的 new String(String) 构造函数
  • Dm:方法调用低效的 new String() 构造函数
  • Dm:方法调用低效的 boolean 构造函数;使用 Boolean.valueOf(...) 代替

关于java - NullPointerExceptions 和内存泄漏的 FindBugs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826256/

相关文章:

java - 什么是NullPointerException,我该如何解决?

java - 将 Java 映射转换为 Scala 映射

java - 通过 Java 反射重新创建(通用)成员并填充/分配字段成员

c++ - std::exit 会泄漏内存吗?

android - getJSONfromURL - 空指针异常

java - 什么是NullPointerException,我该如何解决?

java - static() 方法(没有任何声明)

java - 如何告诉 jetty maven 插件 v9.1.x *不*部署依赖的 war 工件?

iPhone 应用程序随机崩溃,没有任何错误或堆栈跟踪

c - glibc 检测到输出文件 : free(): invalid pointer: