Что вызывает замедление работы ОС после запуска Java-приложения, интенсивно использующего память? - PullRequest
1 голос
/ 12 октября 2010

В настоящее время я использую небольшой Java-класс для научных вычислений на графиках (который внутренне создает множество огромных коллекций) из Eclipse на MacOSX Snow Leopard. У меня есть Macbook с 2 ГБ оперативной памяти, и для успешного запуска приложения без ошибки OutOfMemory мне нужно запустить его из eclipse с -Xmx1200m (я знаю, что это очень много).

На выполнение всех вычислений, которые мне нужно выполнить, уходит около 500 секунд, и он также использует всю память, которую я ему предоставил (я контролировал ее с помощью монитора прогресса macosx, а для Real Mem это 1,2 ГБ)

После того, как это приложение выполнено, мой MacOSX практически не работает. Даже если я закрою Затмение, все станет вялым и медленным. Я также замечаю, что все, что я делаю потом (даже после закрытия Eclipse), например, Навигация по поиску очень медленная. Требуются годы, чтобы сделать некоторые папки или изменить каталоги. Иногда я перезагружаю систему, чтобы снова работать эффективно.

Я бы хотел понять, что происходит в фоновом режиме, когда это происходит? У меня сложилось впечатление, что когда java-класс / приложение завершит работу, сборщик мусора по крайней мере в конце очистит все, и я ожидал, что другие программы снова смогут использовать эту память. Но это «ощущается» как утечка памяти, которая затрагивает всю систему, даже если приложение Java больше не работает.

Буду признателен за любые подсказки или прочтения в этом направлении.

Ответы [ 4 ]

5 голосов
/ 12 октября 2010

Ваш Mac работает медленно, потому что у него 2 ГБ, у вас запущен Eclipse И у вас есть приложение на 1,2 ГБ.Скорее всего, он поменялся как сумасшедший.

Ваша Java-программа, вероятно, имеет утечку памяти.Вы добавляете в коллекции, а не удаляете из них.Вы можете использовать профилировщик, такой как TPTP, NetBeans или VisualVM, для его поиска.

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

Если вам действительно нужностолько памяти и это не утечка, тогда вам может потребоваться купить больше, если вы не можете разбить программу на части или сохранить промежуточные результаты в файл или базу данных.

3 голосов
/ 12 октября 2010

То, что вы испытываете, называется своппингом.ОС высвободила (или вывела) кучу страниц виртуальной памяти на диск, чтобы удовлетворить требования вашего Java-кода.Когда ваша программа завершена, и вы пытаетесь вернуться к какой-либо другой программе, которую вы запускаете, ОС должна выполнить загрузку с диска, прежде чем она сможет возобновиться.

Вы можете увидеть все это, используя инструментытакие как top или Activity Monitor.

3 голосов
/ 12 октября 2010

Убедитесь, что процесс Java завершается правильно после выхода из приложения.У меня была похожая проблема с JBoss AS

1 голос
/ 12 октября 2010

Сделайте себе одолжение и купите еще 2 ГБ ОЗУ.Я сейчас использую 32-битное ядро ​​(т.е. меньшее) на моем MBP, а само ядро ​​имеет 800 МБ ОЗУ.Для вас это оставило бы 1.2Gb всего для всего остального.Этого не достаточно.Поверьте, если вы купите дополнительную оперативную память, не только ваш Java-процесс будет лучше, но все будет казаться намного более быстрым.

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