Spec-Zone.ru › OpenJDK 21

Интерфейс 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, если какой-либо из пулов памяти поддерживает порог использования или порог использования при сборке, которые можно определить, вызвав методы 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
См. также:
  • ManagementFactory.getPlatformMXBeans(Class)
  • Спецификация JMX.
  • Способы доступа к MXBeans

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

Модификатор и тип Метод Описание
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 для отключения.
Исключения:
SecurityException - если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("control").

gc

void gc()
Выполняет сборщик мусора. Вызов gc() фактически эквивалентен вызову:
 System.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

Spec-Zone.ru

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