项目运行过程中重启
背景:项目中定时处理数据时项目重启或者项目停止运行
原因:经检查发现是由于处理数据量过大导致内存不够用引起了项目的重启或者停止运行,内存使用量随着数据的处理过程持续增大,即使数据处理完毕后内存也没能释放。
内存增长截图如下
解决方案:由于部署环境最大内存只能分配8个G,目前想到的办法只能硬编码实现释放内存
采用了调用Runtime.getRuntime().gc();方法呼叫java虚拟机的垃圾回收器运行回收内存的垃圾以保证尽快的腾出可用的内存,如下为使用了Runtime.getRuntime.gc()后
当调用Runtime.getRuntime().gc();方法后系统运行垃圾回收器,调用gc()方法来建议JVM努力回收没有使用的对象内存,为了使它们占用的内存腾出来让别的对象快速使用。当调用完该方法后,JVM会尽它最大努力从所有不再使用(销毁)的对象中回收内存空间。
弊端:如果项目中还有其他服务在运行,调用gc()方法会导致正在运行的服务被暂停,故如果项目中此时还存 在服务在运行时不能调用gc()方法,此处调用gc()方法是因为项目中除了定时器触发运行的任务外无其他服务在运行,故影响不大。
当然最好的方法还是不要使用Runtime.getRuntime().gc(),但未能找到更好的办法,希望能有更好的解决办法
上述仅代表个人观点