堆使用率达到 80% 时发出通知

Notifying when reaching 80% of heap usage

我有一个保存在堆上的内部缓存。我想在堆使用率达到 80% 时发出通知(在 gc 收集之后),以便我可以安排增加堆大小(或其他一些操作)

我正在看:https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html, specifically: 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),但是我不确定这是否会产生任何不良影响。

实现我所追求的目标的最佳方法是什么?

你可以在HeapMemoryMonitor class which calls MemoryPoolMXBean.setUsageThreshold()方法中看一下Hive在多次检查完成后是如何做到的。

如果您想将阈值设置为 80%,您应该计算该值:

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