超出GC开销限制以获取rowcount

时间:2014-05-08 09:02:27

标签: java oracle

我得到" GC开销超出限制"尝试获取rowcount时出现异常。能不能让我知道问题是什么

Java代码:

try{
    rs = RtHelper.getResultSet(hm, sortColumn, sortOrder, con);
    if (rs != null) {
    rs.last();
    rowCountValue = rs.getRow();
    }
    }catch(Exception exception){

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

2014-05-08 00:27:47,948 ==== MYService.java ==== thread: jmsContainer-7349 ==== ERROR >
com....jms.MyService.printException() => (line: 263)
Exception: java.lang.OutOfMemoryERROR: GC overhead limit exceeded
at oracle.jdbc.driver.ScrollableResultSet.cacheCurrentRow(ScrollableResultSet.java:2257)
at oracle.jdbc.driver.ScrollableResultSet.cacheAllRows(ScrollableResultSet.java:2315)
at oracle.jdbc.driver.ScrollableResultSet.getLastRow(ScrollableResultSet.java:2368)
at oracle.jdbc.driver.ScrollableResultSet.last(ScrollableResultSet.java:477)
at org.apache.commons.dbcp.DelegatingResultSet.last(DelegatingResultSet.java:329)

1 个答案:

答案 0 :(得分:1)

可能是您的结果集数据大小对于可用的JVM堆内存来说太大了。

如果您有足够的RAM,则可以增加Java堆大小。 而且如果数据非常大,则批量检索结果。

根据您的可用RAM添加这样的JVM参数,

-Xms512m -Xmx2g -XX:PermSize=512m  -XX:MaxPermSize=2g

此示例将分配总共4 GB的内存。