我有一个内部缓存保存在堆上。我想通知何时堆被使用了80%(在gc收集之后),以便我可以安排增加堆的大小(或采取其他措施)
我正在查看:https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html,特别是:https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryNotificationInfo.html#MEMORY_COLLECTION_THRESHOLD_EXCEEDED
似乎我可以在此处设置阈值:https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryPoolMXBean.html#setCollectionUsageThreshold(long),但是我不确定这是否会产生任何不良影响。
实现我所追求的最好的方法是什么?
答案 0 :(得分:2)
您可以看看Hive在HeapMemoryMonitor
class中是如何完成的,它在完成多项检查后会调用MemoryPoolMXBean.setUsageThreshold()
方法。
如果要将阈值设置为80%,则应将值计算为:
MemoryPoolMXBean pool = ...
pool.setUsageThreshold((long) Math.floor(pool.getUsage().getMax() * 0.8));