Spec-Zone.ru › OpenJDK 24

Интерфейс MemoryMXBean

Все суперинтерфейсы:
PlatformManagedObject
public interface MemoryMXBean extends PlatformManagedObject
Интерфейс управления системой памяти виртуальной машины Java.

Виртуальная машина 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, если хотя бы один из пулов памяти поддерживает порог использования usage threshold или порог использования при сборе collection usage threshold, которые можно определить, вызвав методы 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);
 
Since:
1.5
См. также:
  • ManagementFactory.getPlatformMXBeans(Class)
  • Спецификация JMX.
  • Способы доступа к MXBean

Краткое описание методов

Модификатор и тип Метод Описание
void gc()
Выполняет сборщик мусора.
MemoryUsage getHeapMemoryUsage()
Возвращает текущее использование памяти кучи, используемой для выделения объектов.
MemoryUsage getNonHeapMemoryUsage()
Возвращает текущее использование памяти не-кучной памяти, используемой виртуальной машиной Java.
int getObjectPendingFinalizationCount()
Устарело.
Окончательная обработка устарела для удаления.
boolean isVerbose()
Проверяет, включен ли подробный вывод для системы памяти.
void setVerbose(boolean value)
Включает или отключает подробный вывод для системы памяти.

Методы, объявленные в интерфейсе 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()
Возвращает текущее использование памяти вне кучи, используемой виртуальной машиной Java. Память вне кучи состоит из одного или нескольких пулов памяти. used и committed размер возвращаемого использования памяти — это сумма этих значений для всех пулов памяти вне кучи, тогда как init и max размер возвращаемого использования памяти представляет настройку памяти вне кучи, которая может не быть суммой этих значений для всех пулов памяти вне кучи.

Доступ к MBeanServer:
Сопоставленный тип MemoryUsage — это CompositeData с атрибутами, как указано в MemoryUsage.

Возвращает:
объект MemoryUsage, представляющий использование памяти вне кучи.

isVerbose

boolean isVerbose()
Проверяет, включен ли подробный вывод для системы памяти.
Возвращает:
true, если подробный вывод для системы памяти включен; false в противном случае.

setVerbose

void setVerbose(boolean value)
Включает или отключает подробный вывод для системы памяти. Информация о подробном выводе и поток вывода, в который выводится подробная информация, зависят от реализации. Обычно виртуальная машина Java выводит сообщение всякий раз, когда она освобождает память при сборе мусора.

Каждый вызов этого метода глобально включает или отключает подробный вывод.

Параметры:
value - true для включения подробного вывода; false для отключения.

gc

void gc()
Выполняет сборщик мусора. Вызов gc() фактически эквивалентен вызову:
 System.gc()
 
См. также:
  • System.gc()

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.management/java/lang/management/MemoryMXBean.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API