Java堆内存错误

JJunior:

我收到此错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1585)
    at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1409)
    at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2886)
    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:476)
    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2581)
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1757)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2171)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2512)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1476)
    at DBase.connect(automateExport.java:31)
    at automateExport.main(automateExport.java:10)

我试图通过打开eclipse.ini文件,然后更改来增加堆内存空间

-Xms 256m and -Xmx 512m

但这没有帮助。我尝试了512m和1024m,但最终出现错误:无法启动JVM,并且eclipse无法打开。

我试图在cmd行上做同样的事情:

java -Xms 256m and -Xmx 512m

并且蚀,-vmargs -Xms 256m and -Xmx 512m但是仍然没有帮助。我基本上是在创建JDBC连接,以查询数据库中非常大的记录集。请帮我。

我们:

当查询返回非常大的集合时,默认情况下,mysql驱动程序将整个结果集加载到内存中,然后再给您控制权。听起来您的内存快用完了,所以请增加内存容量,例如-Xmx1024M

另一种选择是在MySQL查询上启用流式结果-这样可以防止将整个ResultSet一次全部加载到内存中。这可以通过做

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, 
           java.sql.ResultSet.CONCUR_READ_ONLY);//These are defaults though,I believe
stmt.setFetchSize(Integer.MIN_VALUE);

(请注意,除了Integer.MIN_VALUE之外,其他所有内容均对MySQL驱动程序无效)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章