У меня есть небольшое 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](https://i.stack.imgur.com/wAPTl.gif)
Так возможно ли, что 68 МБ, показанные в диспетчере задач в Win 7, просто запрашиваются, но неназначенная виртуальная память?
РЕДАКТИРОВАТЬ 2
Снижение PermGen до 12 МБ не повлияло на оперативную память, но JVisualVM показало, что оно уменьшилось (очевидно, 12 МБ представляет собой своего рода минимум, потому что понижение этого значения не имело эффекта в JVVM).