Уведомление при достижении 80% использования кучи - PullRequest
0 голосов
/ 02 января 2019

У меня есть внутренний кеш, который держится в куче.Я хотел бы уведомить, когда куча используется на 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 голосов
/ 02 января 2019

Вы можете посмотреть, как Hive делает это в HeapMemoryMonitor классе , который вызывает метод MemoryPoolMXBean.setUsageThreshold() после нескольких проверок.

Если вы хотите установить порог на 80%, вы должны рассчитать значение как:

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