我在将记录插入数据库时​​遇到java堆空间错误?

时间:2013-04-15 09:35:10

标签: java oracle heap

我在尝试将记录插入数据库时​​遇到了Java堆空间错误。我不确定oracle如何能够使用堆以及为什么它会消耗这么多。错误发生在这一行:

 Connection con       = null;
    PreparedStatement ps = null;
    ResultSet rs         = null;
    String sqlString     = null;
    DaoUtility dUtil     = DaoUtility.getInstance();

    try
    {
      con = dUtil.getConnection();
      . . .
      dUtil.executeUpdate(ps);

这是日志:

  

java.lang.OutOfMemoryError:Java堆空间           at java.lang.reflect.Array.newArray(Native Method)           at java.lang.reflect.Array.newInstance(Array.java:52)           at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226)           at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7643)           at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2949)           at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2355)           at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571)           at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)           at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)           在weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:172)

3 个答案:

答案 0 :(得分:1)

Oracle JDBC驱动程序因内存消耗而臭名昭着。请阅读有关您可用的configuration parameters来控制其内存消耗。特别要注意oracle.jdbc.maxCachedBufferSize的情况。

答案 1 :(得分:1)

通常,当没有足够的空间在Java堆中分配对象时,会抛出此错误。在这种情况下,垃圾收集器无法使空间可用于容纳新对象,并且无法进一步扩展堆。此外,当本机内存不足以支持加载Java类时,可能会抛出此错误。在极少数情况下,当花费过多的时间进行垃圾收集并且释放的内存很少时,可能会抛出java.lang.OutOfMemoryError。

答案 2 :(得分:0)

您还需要检查JDBC和您的应用程序的JDK版本。有时两者之间的不匹配也会导致这种错误。

另外,您可以尝试将记录插入到另一个(简单)表中。这是为了确认问题是插入特定表(由于更多的行或数据量)。