Назад | Перейти на главную страницу

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 МБ свободной памяти.

Что-нибудь изменилось в w.r.t. управление памятью Java 7, и означает ли это, что Java 7 может работать только с меньшим объемом памяти?

Спасибо за любой совет,

Рон

Две информации, которые могут помочь вам правильно рассчитать память:

  1. 32-разрядная ОС не может использовать более 3 ГБ ОЗУ, даже если установлено больше
  2. Хотя память выделена для Java, она "свободна" в информации о системе, пока java не использует ее активно.

Если у вас также запущен какой-либо другой java-процесс (например, eclipse?), Вы также не увидите выделенную память для этих процессов.