Java использует слишком много памяти в Linux? - PullRequest
1 голос
/ 01 февраля 2010

Я тестировал количество памяти, которое Java использует в Linux. При запуске приложения, которое абсолютно НИЧЕГО не работает, оно уже сообщает, что используется 11 МБ. Когда вы делаете то же самое на машине Windows, используется около 6 МБ. Они были измерены с верхней командой и диспетчером задач Windows. Виртуальная машина под Linux, которую я использую, является 1.6_0_11, а виртуальная точка доступа - это Сервер 11.2. Запуск приложения с использованием -client ни на что не влиял.

Почему Java занимает столько памяти? Как я могу уменьшить это?

РЕДАКТИРОВАТЬ: я измеряю память с помощью диспетчера задач Windows, и в Linux я открываю терминал и набираю top.

Кроме того, меня интересует только то, как уменьшить это или я даже МОГУ это уменьшить. Я сам решу, много ли мег или много. Просто разница в 5 МБ между Windows и Linux странная, и я хочу знать, смогу ли я сделать это и в Linux.

Ответы [ 5 ]

2 голосов
/ 01 февраля 2010

Если вы думаете, что 11 МБ - это «слишком много» памяти ... вам лучше избегать использования Java полностью. Серьезно, JVM должна делать довольно много вещей (проверка байт-кода, GC, загрузка всех необходимых классов), и в эпоху, когда средние настольные машины имеют 4 ГБ ОЗУ, сохраняя базовые издержки JVM (и использование памяти в генерации) очень низкий уровень просто не является приоритетом дизайна.

Если вам нужно, чтобы ваше приложение работало во встроенной системе (почти единственный случай, когда 11 МБ можно было бы с полным основанием считать «слишком большим»), то существуют специальные JVM , разработанные для таких систем, которые используют меньше оперативной памяти - но за счет отсутствия многих функций и / или производительности основных JVM.

1 голос
/ 01 февраля 2010

Вопрос, который вы действительно можете задать, таков: "Диспетчер задач Windows и Linux лидируют в памяти одинаково?" Я уверен, что есть другие, которые могут ответить на этот вопрос лучше, чем я, но я подозреваю, что вы не проводите сравнение яблок с яблоками.

Попробуйте использовать приложение jconsole на каждом соответствующем компьютере для более детальной проверки. Вы найдете jconsole на вашем SDK в каталоге bin.

Существует также очень обширное обсуждение управления памятью Java на http://www.ibm.com/developerworks/linux/library/j-nativememory-linux/

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

1 голос
/ 01 февраля 2010

Вы можете контролировать размер кучи, в противном случае будут использоваться значения по умолчанию, java -X дает объяснение значения этих переключателей

i.g.

set JAVA_OPTS="-Xms6m -Xmx6m"
java ${JAVA_OPTS} MyClass
0 голосов
/ 01 февраля 2010

Linux и Windows - радикально разные операционные системы и используют ОЗУ очень по-разному. Windows вроде распределяется по мере того, как вы идете, и Linux кэширует больше сразу и готовится к будущему, так что следующие операции будут гладкими.

Это объяснение не совсем верно, но оно достаточно близко для вас.

0 голосов
/ 01 февраля 2010

И Top, и TaskManager сообщат, сколько памяти было выделено процессу, а не сколько фактически использует процесс, поэтому я бы сказал, что это не сравнение яблок с яблоками. Независимо от того, в эпоху гигов памяти, что пара мег здесь или там при запуске?

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