Исключительно большая виртуальная память Java для фактического использования памяти в некоторых средах

Я пытаюсь понять использование виртуальной памяти для моего Java-приложения, которое, похоже, зависит от среды, в которой я запускаю свою банку.

У меня две среды:

env 1

cat /proc/version
Linux version 3.5.0-48-generic (buildd@roseapple) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #72~precise1-Ubuntu SMP Tue Mar 11 20:08:23 UTC 2014

java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK Server VM (build 24.45-b08, mixed mode)

env 2

cat /proc/version
Linux version 3.2.0-49-generic (buildd@komainu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #75-Ubuntu SMP Tue Jun 18 17:39:32 UTC 2013

java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

команда:

java -Xms128m -Xmx256m -cp myjar.jar com.test.Main

Я запускаю одну и ту же банку, одну и ту же команду в обеих средах, и использование виртуальной памяти сильно различается.

На env 1 все работает так, как я думаю, с резервированием до 600 МБ виртуальной памяти (куча xmx256m + permGen + прочие мелочи). Однако на env 2 виртуальная память достигает 2600 МБ.

использование физической памяти в обеих средах кажется нормальным и равным заданным размерам.

Я думаю, что виртуальная память должна быть такой же, как в env 1, но я не могу найти объяснения для env 2, чтобы использовать ее так много.

Кто-нибудь испытал это? Что мне следует искать в среде или в конфигурации java?


person mmendez.semantic    schedule 01.07.2014    source источник
comment
Использование виртуальной памяти не является функцией вашего Java-приложения. Это зависит от целого ряда других факторов, особенно от того, как настроена ваша операционная система.   -  person Robert Harvey    schedule 01.07.2014
comment
Ответ про 32-битную и 64-битную версии правильный. также проверьте stackoverflow.com/a/28935176/166062.   -  person Lari Hotari    schedule 07.09.2016


Ответы (1)


Похоже, env2 запускает 64-разрядную версию Java (OpenJDK 64-Bit Server VM), а env1 - 32-разрядную версию Java.

Отметьте /proc/PID/smaps - это дает полную карту виртуального адресного пространства процесса.

person apangin    schedule 01.07.2014