LINUX.ORG.RU

Java: когда вызывается GC?


0

0

В какие моменты времени JVM вызывает GC? Тестирую свою программку, которая работает сутки — объём памяти в столбце RSS увеличился на 5 МБ. В инете нашёл множество статей про утечки, но везде указывается, что память не освобождается после вызова GC и ведётся анализ, почему может так быть. Я вручную его не вызываю, поэтому может утечек памяти у меня и нет. Вот и вопрос — а когда он вызывается JVM?

И что можно почитать, чтобы знать, как избежать утечек памяти в Java ?

Хе, капча staling

anonymous

GC вызывается, если при вызове new оказалось, что памяти для обьекта недостаточно. По утечкам памяти есть куча статей. Для их обнаружения можно использовать, например, visualvm.

naryl ★★★★★
()
Ответ на: комментарий от naryl

Почему-то так и думал. А это поведение как-то настраивается ? Просто предполагается, что программа будет работать бесконечное время, поэтому нехорошо поедать всю память. Или вручную, раз в сутки, вызывать GC?

anonymous
()
Ответ на: комментарий от anonymous

-Xmx100m например, и твоя программа физически не сможет съесть больше 100m.

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

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, вариант с ограничением памяти вполне подходит.

anonymous
()
Ответ на: комментарий от anonymous

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

Rikz ★★★
()

Как ни странно, но через 36 часов работы прога отдала память, и сейчас занимает лишь на 500 кб больше, чем при запуске. А отдала 5 МБ. Память в системе не закончилась. Хорошо :)

anonymous
()
Ответ на: комментарий от anonymous

> нехорошо поедать всю память.

GC вызывается, когда заканчивается память, выделенная VM, а не физическая память на компе.

naryl ★★★★★
()
Ответ на: комментарий от anonymous

>-Xmx100m например, и твоя программа физически не сможет съесть больше 100m.

Угу. Хорошо бы б... :D

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND      
32174 l2j       20   0 1103m 482m 177m S    4 19.0  39:11.84 /usr/lib/jvm//sun-jdk-1.6/bin/java -Xmx384m -Xms128m -server ...

:D

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.