为了账号安全,请及时绑定邮箱和手机立即绑定

Java 中的电子邮件服务引发“内存不足”错误

Java 中的电子邮件服务引发“内存不足”错误

慕容708150 2022-10-12 09:45:19
我正在后台运行电子邮件服务(在命令提示符中),它旨在继续运行并获取队列表中的记录以进行处理。在我的主要方法中:public static void main(String[] args) throws Exception {        Email runEmailService=new Email();        runEmailService.schedule();    }它能够获取记录并很好地处理电子邮件,但过了一段时间它会抛出:Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap spaceException: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-1"并且程序停止运行。有没有办法防止这种情况发生,让我的程序继续运行?
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

由于您没有关闭它们,语句和结果集资源可能尚未释放,并保留在内存中。

while(rs.next())考虑在循环后关闭它们:

rs.close(); 
statement.close();

请注意,您可以使用“尝试使用资源”来让事情自行关闭:

try (PreparedStatement statement = con1.prepareStatement(sql); ResultSet rs = statement.executeQuery())

参看。Java 7 自动资源管理 JDBC(try-with-resources 语句)

public void email() throws Exception {


    String sql = "SELECT id,subject,recipient,content FROM emailqueue WHERE status='Pending' ";


    while (true) {


        try (PreparedStatement statement = con1.prepareStatement(sql); ResultSet rs = statement.executeQuery()) {


            while (rs.next()) {


                String subject = rs.getString("subject");


                String recipient = rs.getString("recipient");


                String content = rs.getString("content");


                String id = rs.getString("id");


                sendEmail(recipient, subject, content, id);


            }


        } catch (Exception e) {


            e.printStackTrace();


        }


    }


    con1.close();

    Thread.sleep(2000);


}


查看完整回答
反对 回复 2022-10-12
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号