Интерфейс MemoryMXBean
- Все суперинтерфейсы:
PlatformManagedObject
public interface MemoryMXBean extends PlatformManagedObject
В Java виртуальной машине существует единственный экземпляр класса-реализации этого интерфейса. Этот экземпляр, реализующий этот интерфейс, является MXBean, который можно получить, вызвав метод ManagementFactory.getMemoryMXBean() или из метода platform MBeanServer.
Идентификатор ObjectName для уникальной идентификации MXBean для системы памяти в пределах MBeanServer:
java.lang:type=Memory Его можно получить, вызвав метод PlatformManagedObject.getObjectName(). Память
Система памяти Java виртуальной машины управляет следующими типами памяти:1. Куча
Java виртуальная машина имеет кучу, которая является областью данных времени выполнения, из которой выделяется память для всех экземпляров классов и массивов. Она создается при запуске Java виртуальной машины. Память кучи для объектов освобождается автоматической системой управления памятью, известной как мусорный сборщик.Размер кучи может быть фиксированным или может увеличиваться и уменьшаться. Память для кучи не обязательно должна быть непрерывной.
2. Не-кучевая память
Java виртуальная машина управляет памятью, отличной от кучи (называемой не-кучевой памятью).Java виртуальная машина имеет область методов, которая используется всеми потоками совместно. Область методов относится к не-кучевой памяти. Она хранит структуры на основе классов, такие как пул постоянных данных, данные полей и методов, а также код методов и конструкторов. Она создается при запуске Java виртуальной машины.
Область методов логически является частью кучи, но реализация Java виртуальной машины может выбрать не выполнять сборку мусора или компановку для нее. Как и куча, область методов может быть фиксированного размера или может изменяться в размерах. Память для области методов не обязательно должна быть непрерывной.
Помимо области методов, реализации Java виртуальной машины могут потребовать памяти для внутренних процессов или оптимизации, которые также относятся к не-кучевой памяти. Например, компилятор JIT требует памяти для хранения машинного кода, преобразованного из кода Java виртуальной машины для высокой производительности.
Пулы памяти и менеджеры памяти
Memory pools и memory managers - абстрактные сущности, которые отслеживают и управляют системой памяти Java виртуальной машины. Пул памяти представляет собой область памяти, которой управляет Java виртуальная машина. Java виртуальная машина имеет по крайней мере один пул памяти, и она может создавать или удалять пулы памяти во время выполнения. Пул памяти может принадлежать либо куче, либо не-кучевой памяти.
Менеджер памяти отвечает за управление одним или несколькими пулами памяти. Мусорный сборщик - это один из типов менеджеров памяти, ответственных за освобождение памяти, занимаемой недоступными объектами. Java виртуальная машина может иметь один или несколько менеджеров памяти. Она может добавлять или удалять менеджеров памяти во время выполнения. Один пул памяти может управляться более чем одним менеджером памяти.
Мониторинг использования памяти
Использование памяти - очень важный атрибут для мониторинга системы памяти. Использование памяти, например, может указывать на:- использование памяти приложением,
- нагрузку, оказываемую на автоматическую систему управления памятью,
- возможную утечку памяти.
Мониторинг использования памяти можно выполнить тремя способами:
- Опрос
- Уведомление о пороге использования
- Уведомление о пороге использования при сборке
MemoryPoolMXBean. Механизм мониторинга использования памяти предназначен для использования в балансировке нагрузки или распределении рабочей нагрузки. Например, приложение прекратит получение новых заданий, когда его использование памяти превысит определенный порог. Он не предназначен для обнаружения и восстановления из состояния с недостатком памяти приложением.
Уведомления
Этот MemoryMXBean является NotificationEmitter, который отправляет два типа уведомлений о памяти notifications, если какой-либо из пулов памяти поддерживает порог использования или порог использования при сборке, которые можно определить, вызвав методы MemoryPoolMXBean.isUsageThresholdSupported() и MemoryPoolMXBean.isCollectionUsageThresholdSupported().
-
usage threshold exceeded notification- для уведомления о том, что использование памяти в пуле памяти увеличилось и достигло или превысило его значение порога использования . -
collection usage threshold exceeded notification- для уведомления о том, что использование памяти в пуле памяти больше или равно его пороговому значению сбора использования после того, как Java виртуальная машина приложила усилия для переработки неиспользуемых объектов в этом пуле памяти.
Отправляемое уведомление - это экземпляр Notification, чье значение user data установлено на CompositeData, представляющий объект MemoryNotificationInfo содержащий информацию о пуле памяти во время создания уведомления. CompositeData содержит атрибуты, как описано в MemoryNotificationInfo.
NotificationEmitter
ОбъектMemoryMXBean возвращаемый методом ManagementFactory.getMemoryMXBean() реализует интерфейс NotificationEmitter, что позволяет регистрировать слушатель в MemoryMXBean в качестве слушателя уведомлений. Ниже приведен пример кода, который регистрирует MyListener для обработки уведомлений, отправляемых MemoryMXBean.
class MyListener implements javax.management.NotificationListener {
public void handleNotification(Notification notif, Object handback) {
// handle notification
....
}
}
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
NotificationEmitter emitter = (NotificationEmitter) mbean;
MyListener listener = new MyListener();
emitter.addNotificationListener(listener, null, null);
- С:
- 1.5
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
gc() |
Выполняет сборку мусора. |
MemoryUsage |
getHeapMemoryUsage() |
Возвращает текущее использование памяти кучи, используемой для выделения объектов. |
MemoryUsage |
getNonHeapMemoryUsage() |
Возвращает текущее использование памяти не-кучевой памяти, используемой Java виртуальной машиной. |
int |
getObjectPendingFinalizationCount() |
Устарело. Итоговые действия устарели для удаления. |
boolean |
isVerbose() |
Проверяет, включен ли подробный вывод для системы памяти. |
void |
setVerbose |
Включает или отключает подробный вывод для системы памяти. |
Методы, объявленные в интерфейсе java.lang.management.PlatformManagedObject
getObjectName
Подробное описание методов
getObjectPendingFinalizationCount
@Deprecated(since="18") int getObjectPendingFinalizationCount()
Object.finalize().- Возвращает:
- приблизительное число объектов, для которых ожидается финализация. Если этот MemoryMXBean содержит информацию о JVM, в которой финализация отключена или удалена, этот метод всегда возвращает ноль.
getHeapMemoryUsage
MemoryUsage getHeapMemoryUsage()
used и committed значения возвращаемого использования памяти являются суммой этих значений для всех пулов памяти кучи, в то время как init и max значения возвращаемого использования памяти представляют настройку памяти кучи, которая может не быть суммой этих значений для всех пулов памяти кучи. Значение используемой памяти в возвращаемом использовании памяти — это количество памяти, занимаемой как живыми объектами, так и объектами мусора, которые ещё не были собраны, если таковые имеются.
Доступ к MBeanServer:
отображаемый тип MemoryUsage — CompositeData с атрибутами, как указано в MemoryUsage.
- Возвращает:
- объект
MemoryUsage, представляющий использование памяти кучи.
getNonHeapMemoryUsage
MemoryUsage getNonHeapMemoryUsage()
used и committed значения возвращаемого использования памяти являются суммой этих значений для всех пулов памяти вне кучи, в то время как init и max значения возвращаемого использования памяти представляют настройку памяти вне кучи, которая может не быть суммой этих значений для всех пулов памяти вне кучи. Доступ к MBeanServer:
отображаемый тип MemoryUsage — CompositeData с атрибутами, как указано в MemoryUsage.
- Возвращает:
- объект
MemoryUsage, представляющий использование памяти вне кучи.
isVerbose
boolean isVerbose()
- Возвращает:
-
trueесли подробный вывод для системной памяти включён;falseв противном случае.
setVerbose
void setVerbose(boolean value)
Каждый вызов этого метода включает или выключает подробный вывод глобально.
- Параметры:
-
value-trueдля включения подробного вывода;falseдля отключения. - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("control").
gc
void gc()
gc() фактически эквивалентен вызову: System.gc()
- См. также:
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryMXBean.html