【发布时间】:2012-08-05 10:26:36
【问题描述】:
我有一台配备 Intel(R) Pentium(R) 4 CPU 2.53GHz 和 2 GB RAM 的旧 PC。我正在遍历 javax.mail.Message 实例,并且想知道内存使用的上限。
假设“常规”大小的消息,可以轻松加载多少条消息?几万,几十万?百万?
请只是寻找一些棒球场 WAG。
heap 是这样的:
run:
DEBUG: nntp: newsrc loading /home/thufir/.newsrc
DEBUG: nntp: newsrc load: 5 groups in 16ms
Aug 05, 2012 3:52:17 AM net.bounceme.dur.usenet.driver.FetchBean <init>
INFO: max 259522560
Aug 05, 2012 3:52:17 AM net.bounceme.dur.usenet.driver.FetchBean <init>
INFO: allocatedMemory 16252928
Aug 05, 2012 3:52:17 AM net.bounceme.dur.usenet.driver.FetchBean <init>
INFO: freeMemory 14160912
Aug 05, 2012 3:52:17 AM net.bounceme.dur.usenet.driver.FetchBean <init>
INFO: totalFreeMemory 257430544
Aug 05, 2012 3:52:17 AM net.bounceme.dur.usenet.driver.FetchBean <init>
INFO: useMemory 2092016
我是iterating 到Message,它们是使用GNU NNTP library 从本地Leafnode NNTP 服务器加载的。
检查消息的标头,然后在适当的时候使用 JPQL 将一些标头持久保存到数据库中。
顺便说一下,这是在 Ubuntu 11.10 GNOME 经典版上。
【问题讨论】:
-
堆的内存大小是多少?因为您不能将整个 RAM 分配给 java 堆。
-
@BharatSinha 我用堆中的一些输出进行了更新。
-
有多少对象无关紧要,但它们占用的内存很重要。如何解释你的应用程序是做什么的?也许可以进行一些优化。
-
@JamesPoulson 它们是来自 gmane.com 的非常普通的 Message 对象,大部分只是文本。有些可能有 JPEG,但那将是少数。
-
鉴于您没有太多内存,我希望尽量减少对象的数量和大小。虽然 Java 可以处理数百万个对象,但它们会占用内存并为垃圾收集器带来开销。使用原语并尽量减少丢弃对象可以提高性能(就像升级硬件一样;)
标签: java optimization memory jvm jakarta-mail