FindBugs 之 Experimental

172 阅读2分钟

LG: Potential lost logger changes due to weak reference in OpenJDK

OpenJDK 引入了一种潜在的不兼容性。特别是 java.util.logging。记录器的行为已经改变。它现在不使用强引用,而是在内部使用弱引用。这是一个合理的更改,但不幸的是,有些代码依赖于旧的行为——当更改日志记录器配置时,它只是删除日志记录器引用。这意味着垃圾回收器可以自由回收内存,这意味着记录器配置丢失。例如,考虑一下:

public static void initLogging() throws Exception {
 Logger logger = Logger.getLogger("edu.umd.cs");
 logger.addHandler(new FileHandler()); // call to change logger configuration
 logger.setUseParentHandlers(false); // another call to change logger configuration
}

记录器引用在方法结束时丢失(它没有转义该方法) ,因此如果在调用 initLogging 之后有一个垃圾收集周期,记录器配置就会丢失(因为记录器只保留弱引用)。

public static void main(String[] args) throws Exception {
 initLogging(); // adds a file handler to the logger
 System.gc(); // logger configuration lost
 Logger.getLogger("edu.umd.cs").info("Some message"); // this isn't logged to the file as expected
}

OBL: Method may fail to clean up stream or resource

此方法可能无法清除(关闭、释放)需要显式清除操作的流、数据库对象或其他资源。一般来说,如果一个方法打开一个流或其他资源,那么该方法应该使用 try/finally 块来确保在该方法返回之前对流或资源进行清理。

OBL: Method may fail to clean up stream or resource on checked exception

此方法可能无法清除(关闭、释放)需要显式清除操作的流、数据库对象或其他资源。一般来说,如果一个方法打开一个流或其他资源,那么该方法应该使用 try/finally 块来确保在该方法返回之前对流或资源进行清理。

欢迎大家关注,点赞,收藏

知乎搜索:搬砖小李哥

image.png

微信公众号关注:搬砖小李哥

扫码_搜索联合传播样式-标准色版.png