我有一个存储发票的数据库。我必须使用来自所有发票的信息,使用一系列算法对任何给定月份进行复杂的操作。检索和处理这些操作所需的数据会占用大量内存,因为可能有很多发票。当用户要求进行这些计算的时间间隔长达数年时,问题会变得越来越严重。结果是我得到了一个 PermGen 异常,因为垃圾收集器似乎在每个月的计算之间没有完成它的工作。
我一直使用 System.GC 来暗示 GC 完成其工作并不是一个好习惯。所以我的问题是,除此之外还有其他释放内存的方法吗?您可以强制 JVM 使用 HD 交换来临时存储部分计算吗?
此外,我尝试在每个月末使用 System.gc 计算,结果是 CPU 使用率很高(由于调用了垃圾收集器)和内存使用量相当低。这可以完成这项工作,但我认为这不是一个合适的解决方案。