以下是我需要解决的情况。我有两个解决方案。在Java中查找内存使用情况
我需要维护从数据库中获取的数据的缓存,以便在Swing GUI上显示。 每当我的JVM内存超过其分配内存的70%时,我需要警告用户过度使用。一旦JVM内存使用率超过80%,那么我必须停止所有的数据库查询并清理作为用户操作一部分获取的现有缓存并通知用户。在清理过程中,我将手动处理删除某些基于某些规则的数据并指示JVM进行GC。每当GC发生时,如果内存清理并达到分配内存的60%,则需要重新启动所有数据库处理并将控制权交还给用户。
为了检查JVM内存统计信息,我找到了以下两种解决方案。无法确定哪个是最好的方式以及为什么。
Runtime.freeMemory() - 创建线程运行每10秒并检查可用内存,如果内存超过提到的限制,必要的弹出窗口将亲密用户并调用方法来制止的操作和释放记忆。
MemoryPoolMXBean.getUsage() - Java 5引入了JMX以在运行时获取内存快照。在,JMX我不能使用阈值通知,因为它只会在内存达到/超过给定的阈值时通知。唯一使用的方法是在MemoryMXBean中轮询并检查一段时间内的内存统计信息。
在使用轮询的情况下,对我来说这两种实现看起来都是一样的。
请建议的方法的优点,如果有任何其他替代品/方法使用的任何更正。
IMO,这并不完全正常。这些参数可以调整(池大小,完整的GC间隔等) – 2009-02-17 07:36:51