0

我检查了我的所有连接都已正确关闭。仍然收到 java.lang.OutOfMemoryError: Java heap space.why 我收到 OutOfMemoryError。你能建议我需要检查的内容吗?有什么方法可以在不增加堆大小的情况下解决。我有机会增加堆。请提供任何解决方案

2013-01-18 02:42:11,487|INFO||GatewayOutboundPollerDaemon|Begin pollGatewayIncident().
2013-01-18 02:42:32,225|INFO||GatewayOutboundPollerDbHelper|Begin submitPendingRecords().
2013-01-18 02:42:54,565|INFO||GatewayOutboundPollerDbHelper|Query for Pending Records : SELECT TR_GATEWAY_RECORD_ID, decode(TR_TRANSACTION_TY
PE,1,'Update','Create')TR_TRANSACTION_TYPE, TR_GATEWAY_RECORD_STATUS FROM TM4530_INCIDENT_GATEWAY WHERE TR_GATEWAY_RECORD_STATUS = 0 AND TR_F
ROM_PARTNER = 'RAM' AND TR_GATEWAY_RECORD_STATE = 0 AND TR_TRANSACTION_METHOD = 1 FOR UPDATE
2013-01-18 02:49:47,527|ERROR||DaemonExecutor|ExecutableDaemon threw an exception:
java.lang.OutOfMemoryError: Java heap space
4

5 回答 5

2

您需要检查哪些对象使用的内存最多,例如

jmap -histo:live {pid} | head -30

猜测您可能忘记关闭所有 JDBC 资源,如果您不这样做,这些资源会累积。

于 2013-03-14T07:52:18.917 回答
1

从日志中,看起来您正在执行 SQL 选择

您要查询的结果集有多大?如果它返回一个消耗内存的巨大数据集,那么它可能导致 OutOfMemory

于 2013-03-14T07:57:23.010 回答
0

您可以使用CodePro Analytix来针对该代码缺陷分析您的代码。

于 2013-03-14T08:20:14.880 回答
0

您正在使用的数据集有多大?看起来您的查询返回了数百万条填满内存的记录...尝试使用(如果可能)一个 ResultSet 或限制数据,以限制内存中的记录数量

于 2013-03-14T08:21:15.103 回答
0

您可能应该简单地提高分配给您的程序的内存。检查您的 -Xmx 和 -Xms 属性。

于 2013-03-14T07:57:04.760 回答