в Linux, что такое DATA в выводе команды top для приложения Java?

в Linux, что такое DATA в выводе команды top для приложения Java?

У меня есть приложение JBoss, работающее на платформе Linux, оно выводит данные, как показано ниже (на самом деле это не точные данные):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM  CODE DATA TIME+  COMMAND
 1379 root      16   0  9.7g 1.6g 1980 S  0.7  1.3 36  9.7g 0:11.03 java

Он имеет 1,6 ГБ физической памяти в целом и 9,7 ГБ раздела DATA. Фактически размер кучи составляет ~128 МБ в соответствии с настройкой JVM. У меня вопрос: что хранит раздел DATA для приложения Java? Есть ли какие-нибудь подсказки? И как я могу его оптимизировать?

спасибо, Эмре

решение1

DATAозначает память, выделенную приложением с использованием brk(2)- т.е. расширение сегмента данных.

В Java есть много разных вещей, которые она помещает в сегмент данных:

  • Куча
  • Любая память, выделенная собственным слоем среды выполнения (код с использованием nativeключевого слова)
  • Любая память, выделенная библиотеками DLL/разделяемыми библиотеками, которые вы загружаете из Java с помощью JNI/JNA
  • Память, в которую загружается байт-код, интерпретируется и компилируется JIT (кэш кода)
  • Структуры памяти, используемые GC и другим кодом поддержки времени выполнения
  • Стек

Обратите внимание, что предоставление программе кучи в 128 МБ выделит больше, чем это, поскольку Java также создаст некоторые структуры для управления кучей, которые не являются ее частью. Таким образом, 128 МБ означает, что у вас будет 128 МБ, в которых вы можете выделить объекты Java.

решение2

Это объем физической памяти, выделенной для кода, отличного от исполняемого, также известный как размер «набора резидентных данных» или DRS. Как правило, вы можете обратиться к странице руководства, которая подробно описывает все столбцы. Чтобы получить страницу руководства, введите man top.

Связанный контент