Почему такая большая разница в использовании памяти приложением Java в Windows XP 32 против Windows 7 64 - PullRequest
5 голосов
/ 14 апреля 2011

У меня есть небольшое Java-приложение , которое я написал для записи своей работы. Поскольку он открыт весь день, каждый день одна из вещей, которые меня изначально интересовали в отношении выбора языка, - это объем памяти, который он будет использовать.

К счастью, в Windows XP I он обычно потреблял бы около 5 МБ при свертывании и 12 или около того при максимизации и успешно работал с -Xmx5M (потребление памяти в соответствии с диспетчером задач Windows).

Когда я обновил свой домашний ПК с более новым оборудованием и в то же время до Windows 7 64 (, хотя я установил и использую 32-битную JVM ), я сразу заметил, что JVM для это приложение теперь сообщает о 68 МБ + всегда ... и это с -Xmx5M -Xss16K, согласно «Рабочему набору» диспетчера задач.

Как на старых, так и на новых машинах было / есть 4 ГБ ОЗУ, из которых 512 МБ используется для видео. Оба выполняли последние сборки Java 6 - об обновлении 15 для WinXP, а теперь обновлении 24 для Win7. Приложение занимает на диске 70 К в 12 классах. Более того, мой рабочий компьютер по-прежнему Windows XP, работает под управлением Java 6_24, и он показывает около 12 МБ для этого идентичного приложения - и под буквально я подразумеваю, что две системы синхронизированы для всех моих инструментов разработки.

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

Может кто-нибудь пролить свет на это и предложить, как значительно уменьшить объем памяти для приложения Java 6?

Редактировать

Ответ может быть в чрезмерном размере PermGen. Согласно JVisualVM, у меня есть куча:

Размер: 5,2 МБ, используется: 4,3 МБ (пик) и выделено 6,2 МБ.

но для PermGen

Размер: 12,5 МБ, используется: 4,6 МБ (пик) и Выделено 67,1 МБ .

enter image description here

Так возможно ли, что 68 МБ, показанные в диспетчере задач в Win 7, просто запрашиваются, но неназначенная виртуальная память?

РЕДАКТИРОВАТЬ 2

Снижение PermGen до 12 МБ не повлияло на оперативную память, но JVisualVM показало, что оно уменьшилось (очевидно, 12 МБ представляет собой своего рода минимум, потому что понижение этого значения не имело эффекта в JVVM).

Ответы [ 5 ]

1 голос
/ 14 апреля 2011

Помните, что все в Java является указателем (по большей части), поэтому при переключении на 64-битную машину с 64-битными адресами памяти ваши указатели удваиваются в размере.

ВJVM ( -XX: + UseCompressedOops ) для включения указателей сжатых объектов .Это увеличит использование памяти до уровней, которые вы видели на 32-битных машинах.

1 голос
/ 14 апреля 2011

Для 64-битной JVM вы можете указать опцию, которая уменьшит накладные расходы на 64-битную адресацию. Пока куча меньше 32 ГБ, она может сжать указатели обратно до 32-битной. В типичном Java-приложении это экономит около 40% памяти. См. Сжатые упы в Hotspot JVM для получения более подробной информации. Вот вариант для этого:

-XX:+UseCompressedOops

Обратите внимание, что если вы используете 32-битную JVM в 64-битной ОС, вы не будете платить за 64-битные адреса памяти (хотя есть и другие издержки при переводе, но они очень незначительные) .

Я считаю, что Windows 7 не сообщает о памяти использовать так же, как XP либо (у меня нет референтной экспромтом, хотя). Таким образом, для правильного сравнения 32-битной и 64-битной версий вам нужно запустить обе версии в одной и той же версии Windows.

1 голос
/ 14 апреля 2011

64-битная ОС использует 64-битный размер указателей, а 32-битная ОС использует 32-битную. Это может быть только одна из причин.

0 голосов
/ 15 апреля 2011

Хотя это не вся история, размер PermGen на 30% больше на 64-битных платформах:

-XX: MaxPermSize - размер постоянного поколения. [5.0 и новее: 64-битные виртуальные машины масштабируются На 30% больше; 1,4 драм: 96 м; 1.3.1 -клиент: 32м.]

0 голосов
/ 14 апреля 2011

Это не имеет ничего общего с 64-битной операционной системой - Windows XP и Windows 7 используют ОЗУ очень по-разному .

Из-за этогоWindows 7 будет почти всегда сообщать о том, что все программы используют больше памяти, чем Windows XP.Не беспокойтесь об этом - это просто результат того, что Windows 7 использует вашу память так, как она должна быть: в качестве кэша .

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