java.lang.OutOfMemoryError:尝试连接DB2时的Java堆空间

时间:2015-02-20 16:29:27

标签: java db2 lotus-notes lotus-domino

这是JDBC驱动程序db2jcc4.jar

的问题

以下是我的Lotus Notes代理程序代码,在多次运行后失败并出现“java.lang.OutOfMemoryError:Java堆空间”异常:

import lotus.domino.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;

public class JavaAgent extends AgentBase {
    Session s = null;
    Database db = null;
    ResultSet resultSet = null;
    Statement st = null;
    Connection db2Conn = null;

    public void NotesMain() {
        try {
            s = getSession();
            db = s.getCurrentDatabase();

            Class.forName("com.ibm.db2.jcc.DB2Driver");
            db2Conn = DriverManager.getConnection(
                    "jdbc:db2://myserver.xxxxxxxx.xxx.com:60000/MYDB",
                    "myuser", "mypassword");

            st = db2Conn.createStatement();
            String myQuery = "SELECT * FROM MY_TABLE";
            resultSet = st.executeQuery(myQuery);
            while (resultSet.next()) {
                System.out.println(resultSet.getString("COLUMN1"));
            }

        } catch (SQLException sqle) {
            sqle.printStackTrace();

        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            try {
                resultSet.close();
                st.close();
                db2Conn.close();
                db.recycle();
                s.recycle();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

增加堆大小没有帮助。只有当我将db2jcc4.jar作为脚本库或直接作为java存档附加到代理程序时,才会出现此问题。

当我将db2jcc4.jar复制到C:\ notes \ jvm \ lib \ ext \文件夹并重新启动Notes客户端时,问题就消失了。没关系。但是要在Domino服务器上运行代理,我需要将db2jcc4.jar复制到Domino \ ext \文件夹中,我不想这样做:

  • 可能有另一个版本的db2jcc4.jar文件无法与我的DB2版本一起使用;
  • 我会将db2jcc4.jar直接保存到我的Notes数据库中,以便能够随时更新它。

所以有人遇到过这样的问题吗?在这种情况下如何正确卸载/回收类(参见上面的代码)

java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:4138)
at java.util.Arrays.copyOf(Arrays.java:3870)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:119)
at lotus.domino.ClassHashtable.explodeArchive(Unknown Source)
at lotus.domino.ClassHashtable.addAttachment(Unknown Source)
at lotus.domino.AgentLoader.addAttachment(Unknown Source)

0 个答案:

没有答案