我有一个内部缓存,它保存在堆上.我想在堆使用率达到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),但我不确定这是否会产生任何不良影响.
实现目标的最佳途径是什么?
解决方法:
您可以查看Hive在HeapMemoryMonitor
class中如何执行多次检查后调用MemoryPoolMXBean.setUsageThreshold()
方法.
如果要将阈值设置为80%,则应将该值计算为:
MemoryPoolMXBean pool = ...
pool.setUsageThreshold((long) Math.floor(pool.getUsage().getMax() * 0.8));