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

我正在后台运行电子邮件服务(在命令提示符中),它旨在继续运行并获取队列表中的记录以进行处理。

在我的主要方法中:


public static void main(String[] args) throws Exception {




        Email runEmailService=new Email();


        runEmailService.schedule();




    }

它能够获取记录并很好地处理电子邮件,但过了一段时间它会抛出:


Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space


Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-1"

并且程序停止运行。


有没有办法防止这种情况发生,让我的程序继续运行?


慕容708150
浏览 100回答 1
1回答

神不在的星期二

由于您没有关闭它们,语句和结果集资源可能尚未释放,并保留在内存中。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);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java