有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是JDBC驱动程序db2jcc4的一个问题。罐子

以下是我的Lotus Notes代理代码,在多次运行后出现“java.lang.OutOfMemoryError:java heap space”异常:

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。与我的DB2版本不兼容的jar文件
  • 我会保留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) 个答案