堆使用率达到 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));
我有一个保存在堆上的内部缓存。我想在堆使用率达到 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));