【发布时间】:2014-05-08 09:02:27
【问题描述】:
我在尝试获取行数时遇到“超出 GC 开销限制”异常。你能告诉我是什么问题吗
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)
【问题讨论】:
-
如果你只想要行数,你的 SQL 应该是 SELECT COUNT(*) FROM table。这仅返回行数。
-
没错。这基本上是一种获取行数的愚蠢方法。根据@GilbertLeBlanc 的建议,它可能是 O(1) 的 O(N)。