Java 7: должны ли пользователи знать об изменениях в обработке динамической памяти?
После установки последней версии Java 7 Development Kit (Java SE 7u11) на мой 32-разрядный ПК под управлением Windows 7 Professional с 4 ГБ ОЗУ я заметил, что не могу выделить много памяти для Tomcat.
Принимая во внимание, что эти настройки памяти работали для Java Development Kit 6u38:
set JAVA_OPTS=-server -Xms978m -Xmx978m -XX:MaxPermSize=512m
... при запуске с jdk7 эти настройки приводят к закрытию программы запуска Tomcat со следующим сообщением об ошибке:
Произошла ошибка при инициализации ВМ
Не удалось зарезервировать достаточно места для кучи объектов
Ошибка: не удалось создать виртуальную машину Java.
Ошибка: произошло фатальное исключение. Программа будет закрыта.
Я попытался понизить настройки Xms и Xmx, и, очевидно, он не будет работать с более чем 512 м:
set JAVA_OPTS=-server -Xms512m -Xmx512m -XX:MaxPermSize=512m
Еще, systeminfo |find "Available Physical Memory"
говорит мне, что у меня 1200мб доступной памяти.
Изменилось ли что-нибудь в отношении управления памятью в Java 7, и означает ли это, что Java 7 может работать только с меньшим объемом памяти?
Спасибо за любой совет,
Рон
1 ответ
Две информации, которые могут вам помочь, правильно рассчитать память:
- 32-разрядная ОС не может использовать более 3 ГБ ОЗУ, даже если установлено больше
- Хотя память выделена для Java, она "свободна" в системной информации, пока java не использует ее активно
Если у вас также запущен какой-либо другой Java-процесс (например, eclipse?), Вы также не увидите выделенную память этих процессов.