所以我想優化一個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緩衝整個結果由默認的內存設置,但沒有幫助。
有關如何解決此問題的任何想法將不勝感激,謝謝。