Если у приложения Java есть утечка памяти, JVM в конечном счете исчерпал бы память и флаг, правильно? - PullRequest
0 голосов
/ 26 января 2011

Я думаю, что ответ на этот вопрос должен быть да ... но я думаю, что я не совсем уверен, так как я спрашиваю об этом :)

Я просто пытаюсь определить, если мойУ веб-приложения где-то есть утечка памяти.Если использование памяти продолжает увеличиваться, в конечном итоге должна появиться ошибка «Недостаточно памяти», верно?

Ответы [ 5 ]

3 голосов
/ 26 января 2011

Да, если использование памяти продолжает увеличиваться.

Однако утечка памяти - это ситуация, когда память была выделена и не освобождена, когда она больше не актуальна.Определение не означает, что оно должно повторяться или расти .

Например, если в вашей виртуальной машине Java было 4 ГБ ОЗУ, было несколько событий утечки, которые съели 3 ГБ, и больше не будет событий утечки памяти, вы по-прежнему ограничены 1 ГБ.

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

По моему опыту, такие ситуации встречаются чаще, чем можно было ожидать, что делает их печально известными для выслеживания.

3 голосов
/ 26 января 2011

Да.

Если у вас есть существенная утечка, вы в конечном итоге получите ошибку OutOfMemoryError.

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

1 голос
/ 26 января 2011

Существует множество инструментов для анализа и много раз автоматической изоляции возможных утечек памяти. jhat поставляется с JDK; Eclipse Memory Analyzer является бесплатным, и примером коммерческого предложения является YourKit .

1 голос
/ 26 января 2011

Если вы пытаетесь обнаружить утечку памяти, мониторинг вашего веб-приложения с помощью jconsole может быть хорошей идеей. Также JProbe можно использовать для выявления утечек.

1 голос
/ 26 января 2011

В конце концов. У JVM есть понятие максимального размера кучи, то есть, если оно достигает предела и пытается выделить больше, а не может, оно будет пытаться собирать мусор; если он все еще не может выделить память, вы получите исключение.

...