发送带附件的邮件的最佳策略,在 JVM 中占用的内存较少

Best strategy to send mails with attachments, with a low memory footprint in the JVM

我会在 Java 中发送一封附有文件的电子邮件。 可悲的是我的 JVM 服务器堆内存很少,可以同时发送大文件。我会在发送带有附件的电子邮件时减少内存占用。

我的方法是将文件存储在临时位置并将其作为流发送到 smtp 服务器,而不将文件加载到 JVM 的堆中。

哪个实现可以保证我采用这种方法?

  1. 流是最好的方法,当然没有缓冲。同时删除对字符串的任何使用,尽可能保持代码最像 C。

  2. 限制工作线程数。

  3. 您还可以使用更积极的 GC 配置。

当直接使用 JavaMail MimeBodyPart.attachFile method, or using a FileDataSource 时,JavaMail(好吧,实际上是 JAF)将使用 FileInputStream 将文件读入 8K 缓冲区,然后写出缓冲区,重新使用缓冲区来读取整个文件。它肯定不会把整个文件读入内存。