Ява на Linux - RES против общей памяти () - PullRequest
0 голосов
/ 17 августа 2010

У меня есть приложение Java, работающее в Linux с Xmx, установленным на 1200M

Когда я проверяю процесс в ТОПе, я вижу цифры вроде: VIRT = 1412 м RES = 237 м SHR = 58 м

Внутри Java-приложения я печатаю Runtime.getRuntime (). TotalMemory () каждую минуту, и там отображается число:

totalMemory () = 108M

Почему такая большая разница между значениями RES и totalMemory ()?

Мое понимание (что может быть неправильным) - totalMemory () - это память, используемая прямо сейчас в куче. RES - фактическая оперативная память, используемая процессом.

В качестве обновления: Да, я ожидал бы RES> totalMemory () - но разница здесь составляет 237 МБ - 108 МБ = 129 МБ. Поэтому, если кто-то спросит меня, какой максимальный объем памяти может использовать мое Java-приложение, оно должно составлять 1200 МБ + «что-то» - вопрос в том, как узнать, что «что-то» .. это 150 МБ? 200MB? 300MB

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

totalMemory - это максимальный размер кучи, процесс Java содержит кучу Java и другие объекты, например постоянную область, поэтому размер RES всегда больше размера кучи Java.

0 голосов
/ 17 августа 2010

RES, вероятно, будет включать в себя размер общих библиотек, загружаемых JVM, многие из которых также могут быть загружены для других приложений (например, библиотеки времени выполнения C) и, как таковые, не учитываются при фактическом использовании памяти.JVM, но считаются частью его резидентного образа памяти.

Фактическая интерпретация результатов ps или top, вероятно, лучше направлена ​​на superuser.org или serverfault.org.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...