我需要维护一个从数据库中获取并显示在Swing GUI上的数据缓存。每当我的JVM内存超过其分配内存的70%时,我需要警告用户使用过度。一旦JVM内存使用超过80%,然后我必须停止所有数据库查询并清理作为用户操作的现有缓存,并通知用户。在清理过程中,我将根据某些规则手动处理删除一些数据,并指示JVM进行GC。每当GC发生时,如果内存清理并达到分配内存的60%,我需要重新启动所有的数据库操作并将控制权交还给用户。
为了检查JVM内存统计信息,我找到了以下两种解决方案。无法决定哪种方法最好以及原因。
1. Runtime.freeMemory() - 创建线程每10秒运行一次,检查可用内存,如果内存超出限制,则必要的弹出窗口将通知用户并调用方法停止操作并释放内存。
2. MemoryPoolMXBean.getUsage() - Java 5引入了JMX来在运行时获取内存快照。在JMX中,我不能使用阈值通知,因为它只会在内存达到/超过给定阈值时通知。唯一的方法是在MemoryMXBean中使用轮询并在一段时间内检查内存统计信息。
在使用轮询的情况下,对我来说这两种实现方式似乎是相同的。
请建议方法的优点以及是否有其他替代方法/使用方法的任何更正。