首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java堆内存错误

Java堆内存错误
EN

Stack Overflow用户
提问于 2010-08-10 04:32:54
回答 6查看 10.3K关注 0票数 4

我得到了这个错误:

代码语言:javascript
复制
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文件然后更改来增加堆内存空间

代码语言:javascript
复制
-Xms 256m and -Xmx 512m

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

我试着在cmd line上做同样的事情:

代码语言:javascript
复制
java -Xms 256m and -Xmx 512m

还有eclipse -vmargs -Xms 256m and -Xmx 512m,但仍然没有帮助。我基本上是在创建一个JDBC连接来查询数据库中非常大的一组记录。请帮帮我。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-10 04:43:00

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

另一种选择可能是在MySQL查询上启用流式结果-这可以防止将整个ResultSet一次加载到内存中。这可以通过执行以下操作来完成

代码语言:javascript
复制
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驱动程序产生任何影响)

票数 9
EN

Stack Overflow用户

发布于 2010-08-10 04:42:52

你不需要太担心-Xms --这是启动时的初始堆大小。

-Xmx是最大堆大小。尝试增加它,直到您不再得到OutOfMemory异常,或者直到您耗尽内存。

如果内存耗尽,您不能一次加载整个ResultSet,并且需要应用其他人提到的方法。

票数 1
EN

Stack Overflow用户

发布于 2010-08-10 04:37:18

尝试将您的数据拆分为多个结果集。考虑一下在从数据库中取回数据后,您想要如何处理这些数据。结果集太大,堆空间无法容纳。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3443937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档