【发布时间】:2015-02-27 12:02:43
【问题描述】:
我的情况很奇怪。执行此代码时,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 上运行,Derby 版本/包:db-derby-10.11.1.1-lib。
编辑 1:
当切换到 HSQLDB 数据库时 - 在打开和关闭数千个连接时不再发生内存泄漏:
哇! :)
【问题讨论】:
-
您正在关闭连接和语句,但您是否也在使用结果集并关闭它们?
-
不,代码和你看到的完全一样,不涉及
ResultSet.. -
“不,代码和你看到的完全一样” - 那么……“//some code”是什么意思?你真的只是创建和丢弃连接和语句对象吗??
-
无代码。是的,只有
Connection和Statement打开和关闭。我很惊讶.. :)
标签: java memory-leaks derby