所以我想优化一个Java应用程序,它使用java sql库从远程SQL服务器读取和写入。 (这是一个项目)。如何使用Java建立与数据库服务器的持久连接?
限制在以下库:
com.mysql.*
java.io.*
java.lang.*
java.sql.*
java.text.*
java.util.*
javax.sql.*
,我们对我们的JVM 8MB的内存限制。
代码现在设置的方式,对于需要访问数据库的每个函数,都会创建并关闭一个新连接。例如:
public static void Read()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);
******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
public static void Write()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);
******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
等等
我试图建立一个持久连接,这样我既可以在连接对象传递,即
...
...
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Read(connection);
Write(connection);
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
...
...
然而,当我试图做到这一点,每当我尝试写入数据库然后再读取一个大文件(超过5 MB)时,我的JVM一直在抛出内存不足的错误。
我的问题基本上是,当你做一个单一的连接对象,并不断传递给函数会发生什么?它似乎每次使用时都会以某种方式增长或复制。
我看了看这个网站:
http://benjchristensen.com/2008/05/27/mysql-jdbc-memory-usage-on-large-resultset/
这表明我使用statement.setFetchSize(Integer.MIN_VALUE);
功能,从而削减了JVM缓冲整个结果由默认的内存设置,但没有帮助。
有关如何解决此问题的任何想法将不胜感激,谢谢。