执行计时器任务时 Derby 数据库中的内存泄漏

Memory leak in Derby database while executing Timer task

我的情况很奇怪。执行此代码时,NetBeansIDE 探查器显示内存泄漏(经过一段时间后,应用程序因内存不足而退出):

public class SomeClass extends TimerTask {

    private static final Timer timer = new Timer();

    public SomeClass() {
        //Delay 0, repeat every 20ms
        timer.scheduleAtFixedRate(SomeClass.this, 0, 20);
    }

    @Override
    public void run() {

        try (Connection connDB = 
                 DriverManager.getConnection(
                         "jdbc:derby:someDataBase;create=true"); 
             Statement st = connDB.createStatement()) {
             //Some code in normal situation. But the problem
             //exists even without additional code..
        } catch (SQLException ex) {
            Logger.getLogger(SomeClass.class.getName()).log(
                    Level.SEVERE, null, ex);
        }
    }
}

以下是快照:

内存(堆)

内存 (GC) - 存活世代

这是一些 Derby 数据库错误吗?
运行 JDK8_u31,德比 version/package:db-derby-10.11.1.1-lib

编辑 1: 切换到 HSQLDB 数据库时 - 在打开和关闭数千个连接时不再发生内存泄漏:

哇! :)

我认为这可能是由于 Statement and/or Connection 没有实施 AutoCloseable。然而,根据 JLS,那将是一个编译错误......并且 javadocs 说那些接口确实实现了它。

看起来这是一个 Derby 错误,可能与此有关:

使用内存分析器尝试查看哪些 类 对象正在泄漏。那应该会给你更多线索。