【发布时间】:2009-02-17 05:08:29
【问题描述】:
以下是我需要解决的场景。我已经找到了两种解决方案。
我需要维护从数据库中获取的数据缓存,以便在 Swing GUI 上显示。 每当我的 JVM 内存超过其分配内存的 70% 时,我需要警告用户过度使用。一旦 JVM 内存使用率超过 80%,那么我必须停止所有数据库查询并清理作为用户操作的一部分获取的现有缓存并通知用户。在清理过程中,我将根据一些规则手动处理删除一些数据,并指示 JVM 进行 GC。每当 GC 发生时,如果内存清理并达到分配内存的 60%,我需要重新启动所有数据库处理并将控制权交还给用户。
为了检查 JVM 内存统计信息,我发现了以下两种解决方案。无法决定哪种方法最好以及为什么。
Runtime.freeMemory() - 创建的线程每 10 秒运行一次并检查可用内存,如果内存超过上述限制,必要的弹出窗口将提示用户并调用方法来停止操作并释放记忆。
MemoryPoolMXBean.getUsage() - Java 5 引入了 JMX 以在运行时获取内存快照。在,JMX 我不能使用阈值通知,因为它只会在内存达到/超过给定阈值时通知。唯一的使用方法是在 MemoryMXBean 中轮询并检查一段时间内的内存统计信息。
在使用轮询的情况下,对我来说这两种实现似乎都是相同的。
请提出这些方法的优点,以及是否有任何其他替代方案/对所用方法的任何更正。
【问题讨论】:
标签: java memory memory-management garbage-collection