线程“main”中的异常java.lang.OutOfMemoryError:oracle.jdbc.driver.OracleSql中的Java堆空间。<init>

时间:2017-01-30 12:30:16

标签: java file out-of-memory heap

我正在从磁盘加载一个文件,它包含9,00,000条记录。我正在逐行读取文件并处理它然后设置为java对象。对于每条记录,下面的代码正在执行(它将执行一个插入,一个更新和一个选择查询)

          try
          {

            if(conn != null)
            {

                 selectPrepareStatement.setString(1, someValue);
                 selectPrepareStatement.setMaxRows(1); 

                 rs = selectPrepareStatement.executeQuery();
                 String secondaryCIF = null;
                 insertPreparedStatement.setInt(1, vo.getRecordType());
                 insertPreparedStatement.setString(2, vo.getRefType());
                 insertPreparedStatement.setString(3, vo.getCustOwnershipType());
                 insertPreparedStatement.setString(4, vo.getTin());
                 insertPreparedStatement.setString(5, vo.getCifId());
                 insertPreparedStatement.setString(6, vo.getPrimaryOrSecondary());

                Statement statement =  conn.createStatement();

                     if(vo.getPrimaryOrSecondary().equals("P"))
                     {
                         updatedCount = statement.executeUpdate("update table_name set col1='"+value1+"' where col2= '"+value2)+"'");                        

                         updatedCount = statement.executeUpdate();

                     }else if(vo.getPrimaryOrSecondary().equals("S"))
                     {
                            updatedCount = statement.executeUpdate("update table_name set col3='"+value3+"' where CUST_CIN = '"+value1+"'");
                            updatedCount = statement.executeUpdate();
                    }                


                 insertPreparedStatement.setInt(8, updatedCount);
                 insertPreparedStatement.setString(9, null);

                insertPreparedStatement.executeUpdate();
                }

             if(rs != null)
             {
                 rs.close();
             }              

        }catch(Exception e)
        {

        }

如果我将堆空间增加到1GB,那么在3,00,000条记录之后会收到错误。有人可以帮我解决这个问题吗?

所有预备声明和变量都声明为全局和静态。

1 个答案:

答案 0 :(得分:2)

通常,您必须每N行刷新一次数据库会话,因为数据库执行的所有数据都将存储在您的内存中,直到您刷新或提交它为止。

但由于非常糟糕的问题(省略了最重要的部分代码),我不能给你更多建议。