我有一个存储发票的数据库.我必须使用所有发票中的信息,通过一系列算法为任何给定的月份进行复杂的操作.检索和处理这些操作所需的数据会占用大量内存,因为可能会有大量发票.当用户为这些计算请求的间隔达到几年时,问题变得越来越严重.结果是我得到了一个PermGen异常,因为看起来垃圾收集器在每个月的计算之间没有完成它的工作.
我总是使用System.GC提示GC做它的工作不是一个好习惯.所以我的问题是,除此之外还有其他方法可以释放记忆吗?您是否可以强制JVM使用HD交换以暂时存储部分计算?
此外,我尝试在每个月末计算时使用System.gc,结果是CPU使用率很高(由于调用了垃圾收集器)并且内存使用率相当低.这可以做到这一点,但我认为这不是一个合适的解决方案.
永远不要使用System.gc()
. 它总是要运行很长时间并且常常什么也不做。
最好的办法是重写代码以尽可能减少内存使用。您还没有确切解释您的代码是如何工作的,但这里有两个想法: