达到堆使用率的80%时通知

时间:2019-01-02 10:21:59

标签: java garbage-collection jmx

我有一个内部缓存保存在堆上。我想通知何时堆被使用了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),但是我不确定这是否会产生任何不良影响。

实现我所追求的最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以看看Hive在HeapMemoryMonitor class中是如何完成的,它在完成多项检查后会调用MemoryPoolMXBean.setUsageThreshold()方法。

如果要将阈值设置为80%,则应将值计算为:

MemoryPoolMXBean pool = ... 
pool.setUsageThreshold((long) Math.floor(pool.getUsage().getMax() * 0.8));