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) 个答案