Java,IMAP,检查邮件是否有附件而不提取

时间:2017-03-06 15:34:27

标签: java email imap message attachment

我有一个包含数百万条消息的大邮箱。我只想学习每一个消息,无论它是否有附件。 (不感兴趣的大小,名称,附件数量,只有真假就足够了)。当我使用此代码并使用分析器工具进行监视时,我看到message.getContent()消耗内存并且不会清除它。因为处理数百万条消息,会发生内存不足问题。原因是,getContent()methot会缓存一些数据并保留它。

在不调用 getContent 的情况下,此代码的替代方法是什么? 或者我如何强制清除getContent设置的缓存? 如何为这种情况应用 message.writeTo()

//processing million message instances in a loop i=1, 1000000

Multipart multiPart = (Multipart) message[i].getContent();
for (int i = 0; i < multiPart.getCount(); i++) {
    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
    if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
        // yes, it has an attachment
        return true;
    }
}
return false;

1 个答案:

答案 0 :(得分:0)

这是一个经典的java问题。一般模式是

while(true) {
    Something foo = new Something();
    processSomehow(foo);
    someCollection.add(foo);
}
// at this point, all of the created objects remain reachable

每个foo在离开循环后都不会被使用,但它们都可以访问,因此JVM会变得非常大。经典的解决方案不是保留对您不需要的东西的引用。在您的情况下,message数组保持可达。