[M X OBL] Method may fail to clean up stream or resource
[OBL_UNSATISFIED_OBLIGATION]
This method may fail to clean up (close, dispose of) a stream, database
object, or other resource requiring an explicit cleanup operation.
In general, if a method opens a stream or other resource, the method should
use a try/finally block to ensure that the stream or resource is cleaned up
before the method returns.
This bug pattern is essentially the same as the OS_OPEN_STREAM and
ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and
hopefully better) static analysis technique. We are interested is getting
feedback about the usefulness of this bug pattern. To send feedback, either:
In particular, the false-positive suppression heuristics for this bug pattern
have not been extensively tuned, so reports about false positives are helpful to
us.
See Weimer and Necula, Finding and Preventing Run-Time Error Handling
Mistakes
, for a description of the analysis technique.
这个BUG想说明的是:有些资源打开了,但在函数结束的时候却没有关闭。比如:数据库连接......
虽然JAVA有垃圾回收机制,但是,自己打开的资源需要自己手动关闭,否则有可能直到程序退出,JRE才会清理你打开的资源。这里FindBugs建议在try/finally里面关闭打开的资源,在关闭之前,还要判断资源是否为Null,或者再加一层异常捕获处理噢~
以下是一些可能关闭资源失败的例子:
-----------------------------------------------情况1-----------------------------------------
//
FileOutputStream fs
=
null
;
try
{
fs
=
new
FileOutputStream(clearTableFile);
fs.close();
//
当出异常时候fs关闭失败,所以应该在finally中关闭
}
catch
(
){
//
}
-----------------------------------------------情况2-----------------------------------------
//
Properties props
=
new
Properties();
try{
props.store(
new
FileOutputStream(configFile), configFile);
//
new FileOutputStream(configFile)没有释放。
}
catch(
){
//
}
-----------------------------------------------情况3-----------------------------------------
//
FileOutputStream fs
=
new
FileOutputStream(clearTableFile);
//
(里没有做异常处理,如果中间出异常了,异常会抛往上层,这时fs就没能释放了。
fs.close();
//
http://www.ibm.com/developerworks/cn/java/j-dyn0414/index.html
http://bcel.sourceforge.net/docs/index.html
http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/ba/BlockType.html
http://code.google.com/p/findbugs/wiki/DetectorPluginTutorial
http://www.ibm.com/developerworks/java/library/j-findbug1/#resources
分享到:
相关推荐
**Findbugs在Ant下的配置方法** FindBugs是一款开源的静态代码分析工具,主要用于检测Java代码中的潜在错误、坏味道和安全漏洞。它通过分析字节码而非源代码,能够发现许多编译器无法捕获的问题。在Ant构建环境中...
通过静态代码分析工具,如PMD、FindBugs,可以自动检查出一些常见的编程错误。人工审计则更注重逻辑层面的漏洞,如权限控制、输入验证等。 4. **Web应用漏洞**:国内SRC中,Web应用漏洞占比较大。SQL注入、XSS跨站...
这包括使用埋点收集信息,对常规性能如电量消耗、网络交互进行监控。同时,文档提到了观察者工具和性能分析工具,例如AspectJ重写器,它是一种基于Java的面向切面编程工具,用于在编译时期静态植入代码,以收集运行...
- **数据分析工具**:如Kafka+HDFS+ImpalaSQL+Spark+Hue等,用于收集、存储、处理和展示大量的测试数据。 - **测试报告生成**:通过测试工具自动生成详尽的测试报告,包括覆盖率统计、缺陷列表等。 #### 第三方测试...
- **CheckStyle与FindBugs的比较**:两者都能提升代码质量,但CheckStyle侧重于风格和格式,而FindBugs专注于找出可能导致运行时错误的问题。 2. **Java I/O**: - **多种I/O实现方式**:Java提供了多种I/O实现,...
10. **崩溃日志分析**:当应用出现错误时,收集并分析崩溃日志有助于定位问题。Firebase Crashlytics和Google Play Console的崩溃报告功能是常用的分析工具。 文件名为“android核心分析”可能包含对Android系统...
如JaCoCo用于代码覆盖率测试,FindBugs和SonarQube帮助检测潜在的代码问题,而JMeter和 Gatling则用于压力测试,确保应用在高负载下仍能稳定运行。 综上所述,Java性能优化涵盖了JVM调优、代码编写、系统配置、并发...
- **FindBugs**:一种Java程序错误检测工具,可以检测出代码中可能存在的bug,并提供相应的解决方案。 - 可以配置过滤器来排除不必要的警告。 - 结合插件化框架,实现更高效的代码质量控制。 2. **代码红线和安全...
通过工具如FindBugs、PMD、Checkstyle进行静态代码分析,查找潜在的安全漏洞和不良编程习惯。 六、持续监控与响应 1. Zabbix、Nagios等监控工具可实时监控系统性能和异常事件,及时报警。 2. 配合SIEM(安全信息...
4.IO流:用于读写文件、网络通信等,包括字节流、字符流、对象流等。 5. 多线程:Java支持多线程编程,可以并发执行任务,提高程序效率。 二、开发工具 1.Eclipse或IntelliJ IDEA:主流的Java集成开发环境,提供...
4. **本地日志存储**:在异常发生时,除了向服务器发送报告,还可以选择将关键的日志信息存储在设备本地,这样即使在无网络连接的情况下,当网络恢复时也能上传这些信息。 5. **用户反馈**:添加用户反馈机制,允许...
- 通过编写单元测试来验证代码的正确性,以及使用静态代码分析工具(如FindBugs、Lint)找出潜在的问题,可以在开发阶段发现并修复异常。 8. **异常分类与处理策略** - 不同类型的异常可能需要不同的处理策略。...
针对不同的操作系统(如HP-UX、Solaris、AIX、Linux和Windows),采取相应的调优措施,如调整文件描述符数量、网络缓冲区大小等。 #### 第五章 性能监控和性能分析 ##### 5.1 性能瓶颈 识别系统中的性能瓶颈,并...
"awesome-java-security"是一个收集了大量与Java安全相关的优秀资源的项目,旨在帮助开发者们更好地理解和实践Java安全。该项目包含了各种静态分析工具、安全测试方法以及安全相关的工具集合,为Java开发者提供了一...
9. **代码质量检查**:静态代码分析工具,如FindBugs、PMD和Checkstyle,可以帮助开发者在编码阶段就发现潜在的问题,提高代码质量。 10. **崩溃日志分析**:在应用运行时,可以通过Crashlytics或Firebase Crash ...
为了提高构建速度以及解决访问国外源可能存在的网络问题,通常会更改Gradle的镜像源为国内镜像源。具体步骤是在`GRADLE_USER_HOME`目录下创建一个名为`init.gradle`的文件,并在其中配置新的镜像源地址。例如,可以...
Beta 测试则是面向外部用户的测试,主要目的是收集用户反馈。 - **目的**: Alpha 测试旨在尽早发现问题;Beta 测试旨在获取真实用户的使用反馈。 #### 2.5 系统测试 **2.5.1 恢复测试** - **定义**: 测试软件在...