Java堆内存错误

JJu*_*ior 4 java exception-handling exception jdbc

我收到此错误:

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)
Run Code Online (Sandbox Code Playgroud)

我尝试通过打开eclipse.ini文件然后更改来增加堆memmory空间

-Xms 256m and -Xmx 512m
Run Code Online (Sandbox Code Playgroud)

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

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

java -Xms 256m and -Xmx 512m
Run Code Online (Sandbox Code Playgroud)

还有日食-vmargs -Xms 256m and -Xmx 512m 但仍然没有帮助.我基本上创建了一个JDBC连接来查询数据库中的大量记录.请帮我.

nos*_*nos 9

当您查询返回非常大的集时,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);
Run Code Online (Sandbox Code Playgroud)

(注意除Integer.MIN_VALUE之外的任何其他内容对MySQL驱动程序没有影响)