Jay*_*ren 5 java memory-management out-of-memory
我们有一个基于swing的应用程序,可以对数据进行复杂处理.我们软件的先决条件之一是任何给定的列都不能有太多的唯一值.如果数字是数字,则用户需要先将数据离散化,然后才能使用我们的工具.
不幸的是,我们使用的算法在内存中是组合昂贵的,这取决于每列的唯一值的数量.现在使用错误的数据集,应用程序将很快耗尽内存.在执行其中一个内存不足的操作之前,我们应该能够大致计算出操作需要多少内存.如果我们可以检查应用程序当前正在使用多少内存,估计应用程序是否将耗尽内存,并相应地显示错误消息而不是耗尽内存,那将是很好的.使用java.lang.Runtime,我们可以找到空闲内存,总内存和最大内存,但这真的有用吗?即使看起来我们没有足够的堆空间,也许如果我们等待30毫秒垃圾收集器将运行,突然我们有足够的堆空间来运行我们的操作.反正有没有真正预测我们是否会耗尽内存?
小智 2
我已经为数据库应用程序做了类似的事情,其中无法估计加载的行数。因此,在处理结果集的循环中,我调用“MemorWatcher”方法来检查空闲内存。
如果可用内存低于某个阈值,观察者将强制进行垃圾收集并重新检查。如果仍然没有足够的内存,观察者方法会向调用者发出异常信号。调用者可以从该异常中正常恢复 - 与 OutOfMemoryException 不同,OutOfMemoryException 有时会使 Swing 完全不稳定。