Является ли метапространство также собственной памятью?
Да, Metaspace является частью собственной памяти (памяти процесса) и ограничен операционной системой хоста.
Вы можете отслеживать его с помощью jmap -permstat PID
. Если ваше приложение в конечном итоге выделяет много памяти в метапространстве, это повлияет на всю систему, а не только на JVM. Вот почему рекомендуется использовать -XX:MetaspaceSize
для явного задания максимального размера метапространства для вашего приложения.
API-интерфейсы Java NIO используют ByteBuffers в качестве источника и назначения вызовов ввода-вывода и бывают двух видов:
- Heap Byte Buffer (оборачивает массив byte[], выделенный в куче Java, собранной мусором)
- Прямой байтовый буфер (обтекание памяти, выделенной вне кучи Java)
Поскольку в вызовы операционной системы может быть передана только «собственная» память, поэтому она не будет перемещена сборщиком мусора, это означает, что когда вы используете кучный байтовый буфер для ввода-вывода, она копируется во временный прямой байтовый буфер. JDK кэширует один временный буфер на поток без каких-либо ограничений памяти (т. е. неограниченный кеш). В результате, если вы вызываете методы ввода/вывода с байтовыми буферами большой кучи из нескольких потоков, ваш процесс может использовать огромное количество дополнительной собственной памяти.
Вы можете обратиться к этому & эту статью для получения более подробной информации.
Обновлено
RSS=OffHeap (сопоставленные файлы, внутренний код JVM (сегменты .bss), стеки потоков, прямые буферы) + внутренняя структура GC+ куча + структуры, используемые и выделяемые собственными библиотеками (например, библиотеки ввода-вывода) + метапространство + Общие библиотеки JVM + CodeCache
Вы можете использовать в Linux pmap -x для анализа карты памяти вашего процесса JVM. Кроме того, Jemalloc может помочь записать профиль на диск после каждого x ГБ/x кБ выделения памяти/стека. трассировку, установив соответствующие переменные окружения MALLOC_CONF. Получив сгенерированный файл, попробуйте использовать
Jeprof для визуализации. а>. Например.
jeprof --show_bytes --pdf `which w` jeprof.heap > sample.pdf
для создания PDF-файла для графиков вызовов.
person
sol4me
schedule
24.09.2016