亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號