У меня есть внутренний кэш, который удерживается в куче. Я хотел бы уведомить, когда куча 80% используется (после сбора ГЦ), так что я могу организовать для кучи размера должна быть увеличена (или какой-либо другое действие)
Я взглянуть на: https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html , а именно: https://docs.oracle.com/javase/ 7 / документы / API / Java / языки / управление / MemoryNotificationInfo.html # MEMORY_COLLECTION_THRESHOLD_EXCEEDED
Похоже , что я могу установить порог здесь: https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryPoolMXBean.html#setCollectionUsageThreshold(long) , однако я не уверен , если это будет иметь любое нежелательное влияние.
Что это лучший способ добиться того, что я после?
Вы посмотрите на то, как улей делает это можете HeapMemoryMonitor
класс , который вызывает MemoryPoolMXBean.setUsageThreshold()
метод после того, как несколько проверок выполняются.
Если вы хотите установить порог в 80% вы должны вычислить значение как:
MemoryPoolMXBean pool = ...
pool.setUsageThreshold((long) Math.floor(pool.getUsage().getMax() * 0.8));