内存问题我有一个做以下一些java代码:与ResultSet和SQL Server 2012中
Statement stmt = GetMsSqlConnection().createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM Table WHERE ID=1");
//do stuff with recordset
rs.close();
stmt.close();
这是一个循环,我会通过对表不同的ID的一部分。问题是,虽然这是循环,我看到我的SQL Server进程的内存在每次迭代增长。当我遍历我的代码时,我注意到导致该问题的行是在executeQuery调用中。我不惊讶这导致了一些增加的RAM使用,但我会认为rs.close和stmt.close会释放我的SQL Server上的资源。有没有更好的处理这个或我的环境中的东西我需要看看以确保我在下一次迭代之前释放所有资源?
服务器很可能直到达到某个阈值,以推迟清理。垃圾收集非常昂贵,因此每次释放资源时都不会执行垃圾收集。如果你运行数千个这样的服务器,内存增长没有限制?我敢打赌它达到了一些门槛,然后下降。 –
这是一个可以运行10万次以上的循环,在这种情况下,内存似乎达到了2900 MB左右的上限。我正在使用12 GB RAM的机器,我主要关心的是程序能够在<4 GB RAM的计算机上运行。上限是否与可用RAM的数量成比例? – gdawgrancid
我知道特别是关于MSSQL的零点,但是我使用的每个其他数据库都有旋钮(参数)来设置内存使用限制。 –