我收到java.lang.OutOfMemoryError:向大量收件人发送电子邮件时的Java堆空间。 我尝试了150名收件人工作正常但200名收件人没有工作。
public static void sendMessage(String subject, String text, String sender, String to, String cc, byte[] data, String type) throws Exception {
try {
String EmailServer = "";
String EmailPort = "";
Properties props = new Properties();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream in = in = classLoader.getResourceAsStream("/resources/config.properties");
props.load(in);
if (in != null)
in.close();
EmailServer = props.getProperty("SMTP_SERVER");
System.out.println("EmailServer================:" + EmailServer);
Properties prop = new Properties();
System.out.println("Properties================:" + prop);
prop.put("mail.smtp.host", EmailServer);
// set the port
//prop.put("mail.smtp.port", EmailPort);
Session session = Session.getInstance(prop, null);
Message msg = new MimeMessage(session);
msg.setSubject(subject);
msg.setReplyTo(InternetAddress.parse(sender));
msg.setFrom(new InternetAddress(sender));
msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(
to, false));
msg.addRecipients(Message.RecipientType.CC, InternetAddress.parse(
cc, false));
msg.setContent(text, "text/plain");
msg.setSentDate(new Date());
System.out.println("Before Transport.send================:" + new Date());
Transport.send(msg);
System.out.println("After Transport.send================:" + new Date());
} catch (javax.mail.SendFailedException e) {
e.printStackTrace(System.out);
String invalid = "";
Address[] address = e.getInvalidAddresses();
for (int i = 0; i & lt; address.length ;
i++)
{
if (i == 0)
invalid = invalid + address[i];
else
invalid = invalid + "," + address[i];
}
throw new InvalidEmailAddressException(e.getMessage() + ":" + invalid);
} catch (javax.mail.MessagingException e) {
e.printStackTrace(System.out);
throw new Exception(e.getMessage());
}
}
答案 0 :(得分:1)
您应该首先为他们创建一个组,而不是向个人收件人发送邮件。 关于你得到的错误,似乎应该为JVM分配更多内存(但这完全取决于你的要求,项目等......因此不能是最好的解决方案)。
在稍后阶段,您可以考虑优化代码以防止与内存相关的问题。
答案 1 :(得分:1)
使用 -
增加堆大小java -Xms64m -Xmx256m HelloWorld
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
答案 2 :(得分:1)
大多数情况下,increasing heap size可以解决OutOfMemory错误。但我建议您对应用程序进行性能分析,检查是否存在内存泄漏,或者是否可以(重新)使用某些变量或内存。
此外,如果您可以在此处发布代码,则成员可以帮助您改进代码设计并可能发现问题(如果有的话)。