#java #windows #ant #jvm
#java #Windows #ant #jvm
Вопрос:
Я использую двухъядерный компьютер XP с установленным 4 ГБ памяти (но ОС сообщает только 2,5 ГБ из-за факта 32-битности). Я активно модифицирую старое JAVA-приложение по крайней мере месяц, используя самое последнее Eclipse (редактирование, сборка и запуск) и Ant (другой способ сборки и запуска). В конфигурации запуска Eclipse и build.xml в файле у нас есть следующие параметры JVM: -Xmx1024M -Xms1024M -Xmn384M
. Мы используем эту конфигурацию годами.
У меня также есть командный файл для запуска Eclipse с этим параметром: -vmargs -Xmx768M
. Этот пакетный файл был у меня годами. (теперь я изменил, чтобы изменить eclipse.ini для настройки.)
Позавчера я обнаружил, что это было намного медленнее, когда я использовал Ant для сборки и запуска своего приложения (я часто собираю и запускаю его в процессе модификации). Я перезапустил свой компьютер непосредственно перед тем, как отправиться домой. Той ночью я подключился к своей машине через VPN, чтобы завершить некоторые модификации (я очень хороший сотрудник.) и обнаружил, что более медленный. На следующее утро при запуске нашего приложения с помощью Ant начало появляться сообщение «не удалось создать виртуальную машину Java«.
Я перезапустил свой компьютер. Затем я не смог запустить свой Eclipse с той же ошибкой. Для запуска Eclipse мне нужно изменить виртуальные маркеры, чтобы они требовали только 512 МБ памяти. Время сборки с помощью Ant увеличилось примерно с 20 секунд до примерно 6 минут. И я должен уменьшить максимальную память для JVM до
-Xmx512M -Xms512M
как в конфигурации запуска Eclipse, так и в Ant build.xml во избежание ошибки.
Затем я удаляю свой 1.6u24 jdk / jre и устанавливаю 1.6u25. Я переустановил Eclipse. Просканировал весь компьютер с помощью Trend Micro и ничего не нашел.
Другая машина, которую я обычно подключаю для проведения некоторого тестирования, имеет аналогичный результат (медленнее). Все остальные компьютеры, включая компьютер моего коллеги и мой ноутбук, отлично работают с тем же приложением и инструментами.
Если я использую Ant для сборки и запуска, процесс сборки и запуска выполняется чрезвычайно медленно. Я создал два пакетных файла для компиляции и запуска моего приложения. Они работают в обычном режиме. При компиляции с Eclipse все работает в обычном режиме. Но я не могу попросить JVM требовать 1024 МБ для моего приложения во всех случаях сейчас.
Все остальные действия на моем компьютере кажутся нормальными. Приложения VisualStudio и C # работают в обычном режиме. Моя машина была перестроена несколько недель назад из-за сбоя жесткого диска. Таким образом, нет множества бесполезных вещей, замедляющих работу моей машины.
Кто-нибудь может помочь мне выяснить, почему JVM на моем компьютере изменила свое поведение? Я надеюсь, что это вызвано не вирусом. Знаете ли вы что-нибудь, что я могу попробовать, прежде чем вызывать ЕГО для восстановления своей машины?
Спасибо,
Ответ №1:
Хотя ваша конфигурация, возможно, не изменилась, это не означает, что объем доступной памяти не изменился. Память используется всеми программами в операционной системе, поэтому, если другая программа использует немного больший объем памяти, может оказаться невозможным предварительно назначить 1 ГБ памяти, который, как вы указали (из аргументов командной строки), должен быть доступен для запуска JVM.
Другая возможность заключается в том, что установлена / запущена какая-то новая программа, и ей не хватает необходимой вам памяти. Возможно, была установлена / обновлена проверка на вирусы, и это само по себе может привести к значительному увеличению объема памяти (в зависимости от продукта).
Наконец, вы упомянули, что машина была перестроена. Возможно, вы захотите проверить (через BIOS), что у вас действительно есть тот же объем физической памяти, который был у вас до восстановления. У перестроечных машин есть забавный способ выбивать карты памяти из их гнезд (или, возможно, происходило больше перестроек, чем кажется на первый взгляд). Проблема может быть такой простой, как нехватка памяти для предварительного назначения JVM, потому что вы начинаете с меньшего объема.
Если все это подтвердилось, проверьте непонятные вещи. Если вы переустановили очень старую или другую операционную систему, она может не поддерживать доступ к тому объему памяти, который установлен. Обычно это происходит, когда кто-то возвращается с 64-разрядной установки на 32-разрядную.
Комментарии:
1. Я не задумывался о том, как у меня настроен VirtualBox с 1 ГБ, предварительно выделенным для запуска других операционных систем. Вроде как очевидно…
Ответ №2:
Используйте диспетчер задач или Process Explorer от Microsoft (http://technet.microsoft.com/en-us/sysinternals/bb896653 ) и проверьте, нет ли проблем с памятью. Если вам нужно уменьшить объем используемой памяти, скорее всего, это связано с тем, что ее заняло что-то другое. Кроме того, я нахожу ограничение в 2,5 ГБ немного странным, поскольку я думал, что ограничение больше похоже на 3,25 ГБ (в основном потому, что это то, что у меня есть в Windows XP с установленным 4 ГБ).
Кроме того, каждый раз, когда я вижу это сообщение об ошибке, это связано с тем, что недостаточно доступной физической памяти для захвата. В прошлом мне приходилось закрывать программы, чтобы выполнить несколько действий после получения этого исключения.
(Я бы добавил это в комментарий, но пока нет рейтинга : / )
Ответ №3:
Вы видите что-нибудь странное в диспетчере задач? Загрузка процессора? Тот факт, что вы не можете выделить столько памяти, сколько раньше, звучит странно, но я видел аналогичное сокращение времени компиляции после обновления антивируса на одной из моих машин для разработки.
Что произойдет, если отключить антивирус во время компиляции?
Ответ №4:
Это больше похоже на проблему с конфигурацией, чем на вирус, особенно учитывая, что она была недавно перестроена. Вы не упомянули, используете ли вы 32-разрядную или 64-разрядную Java. Это может помочь узнать, какой из них пытается запуститься при сбое.
Другие вещи, которые следует проверить: настройки виртуальной памяти; любые настройки приложения в операционной системе; настройки антивирусной программы; другие процессы (попробуйте запустить HijackThis и / или MSRT).
Комментарии:
1. У него 32-разрядная ОС, поэтому я надеюсь, что он не использует 64-разрядную Java 😉
2. Ох. Кажется, я пропустил очевидное.