我是FindBugs的新手。我为这种情况编写了一个定制的FindBugs探测器:
GlobalObject ob = Global.open(String Id);
// Do some computation
Global.close(ob);
如果在计算部分中抛出异常,则close语句将永远不会到达并导致内存泄漏。
正确的方法可以是:
GlobalObject ob = Global.open(String Id);
Try {
//computation
}
Finally {
Global.close(ob);
}
或:
Try (SimilarAutoCloseable ob = new SimilarAutoCloseable(String Id)) {
// computation
}
我知道OS_OPEN_STREAM FindBugs的bug类型似乎相似。虽然我不太了解如何实现扩展BytecodeScanningDetector的探测器的细节。类似的例子可能非常有用。