【发布时间】:2011-07-06 03:01:59
【问题描述】:
我们有一个基于 swing 的应用程序,可以对数据进行复杂的处理。我们软件的先决条件之一是任何给定的列不能有太多的唯一值。如果数字是数字,则用户需要先离散化数据,然后才能使用我们的工具。
不幸的是,我们使用的算法在内存中的组合成本很高,具体取决于每列唯一值的数量。现在使用错误的数据集,应用程序将很快耗尽内存。在执行这些会耗尽内存的操作之一之前,我们应该能够粗略地计算出该操作需要多少内存。如果我们可以检查应用程序当前正在使用多少内存,估计应用程序是否会耗尽内存,并相应地显示错误消息而不是内存不足,那就太好了。使用 java.lang.Runtime,我们可以找到空闲内存、总内存和最大内存,但这真的有用吗?即使看起来我们没有足够的堆空间,也可能是如果我们等待 30 毫秒,垃圾收集器就会运行,突然我们有足够的堆空间来运行我们的操作。有没有办法真正预测我们是否会耗尽内存?
【问题讨论】:
-
不要查看可用内存;只需查看总内存并了解您的程序的“基线”。因此,如果在这些计算之前您通常为 50M(例如),总内存为 500M(例如),您可以预期 450M 可用
-
另一个要考虑的问题:空闲内存/总内存/最大内存没有考虑到您的分配需要连续的事实(假设 jvm 和 clr 在这方面是相似的)。
标签: java memory-management out-of-memory