matlab mysql jdbc内存泄漏w /数据库工具箱

时间:2015-01-21 23:32:32

标签: mysql matlab jdbc memory-leaks

我使用mathworks'我遇到了内存泄漏。带有mysql的数据库工具箱。如果我返回大量数据,最终我会因为java堆空间不足而出现内存不足错误。

之前我见过这个并且自己使用com.mysql.jdbc.JDBC4Prepared语句和com.mysql.jdbc.JDBC4ResultSet驱动程序调用。执行此操作时,您必须确保调用每个方法的close()方法,否则您会遇到同样的问题。

我记得今天,当mathworks伪劣的对象通过执行相同的查询并将结果提取几千次来解决堆问题时。事实证明,您可以在mathworks游标和结果集对象中看到mysql jdbc对象:

  

curs = exec(dbConn,sqlStr)

     

rs = fetch(curs)

curs =

    Attributes: []
          Data: 0
DatabaseObject: [1x1 database]
      RowLimit: 0
      SQLQuery: 'xxxxxomitxxxx'
       Message: []
          Type: 'Database Cursor Object'
     ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
        Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
     Statement: [1x1 com.mysql.jdbc.StatementImpl]
         Fetch: 0

rs =

    Attributes: []
          Data: {2497x8 cell}
DatabaseObject: [1x1 database]
      RowLimit: 0
      SQLQuery: 'xxxxxomitxxxx'
       Message: []
          Type: 'Database Cursor Object'
     ResultSet: [1x1 com.mysql.jdbc.JDBC4ResultSet]
        Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
     Statement: [1x1 com.mysql.jdbc.StatementImpl]
         Fetch: [1x1 com.mathworks.toolbox.database.fetchTheData]

1 个答案:

答案 0 :(得分:0)

OP写道:

  

好吧,通过在每次获取后自己关闭mysql jdbc对象,你可以解决问题,而不必提取你在任何地方使用过的所有数学代码:

rs.Statement.close()
rs.ResultSet.close()