Есть ли какой-нибудь взлом, чтобы отключить выполнение GC, пока свободная память не приблизится к нулю? - PullRequest
1 голос
/ 24 марта 2012

Просто любопытно. Если у вас есть 4 ГБ свободной памяти, и вы создаете 10 КБ мусора в минуту. Будет ли GC срабатывать каждую минуту? В моей ситуации было бы предпочтительнее отложить сборку мусора или не выполнять его вообще. Какие-нибудь мысли и идеи о том, как лучше использовать GC для достижения чего-то подобного?

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

Нет, сборщик мусора по умолчанию (последовательный GC) не будет работать до тех пор, пока память не заполнится (пространство Eden или пространство старого поколения).

, если вы хотите минимизировать время работы сборщика мусора вВ вашем случае попытайтесь максимизировать пространство Eden:

java -Xms2g -Xmx3g -XX:NewSize=500m -XX:MaxNewSize=1024m yourApplication

. Приведенные выше настройки запустят ваше приложение с максимальной памятью 3g, а пространство Eden будет максимум 1g, поэтому любой новый выделенный объект будет сохранен вэто пространство, и сборщик мусора (по умолчанию) не будет работать, пока это пространство не будет заполнено объектами.

1 голос
/ 24 марта 2012

Есть ли какой-нибудь способ взлома, чтобы отключить выполнение GC, пока свободная память не приблизится к нулю?

Нет, нет. У вас нет такого уровня контроля внутри приложения. С другой стороны ...

Если у вас есть 4 ГБ свободной памяти и вы создаете 10 КБ мусора в минуту. Будет ли GC срабатывать каждую минуту?

Нет, не будет. GC запускается, когда JVM считает, что это лучшее время для этого. «Лучшее время» зависит от того, для чего ГК пытается оптимизировать; например для пропускной способности или для минимизации пауз:

  • В первом случае это произойдет, когда в пространстве Eden (где создаются новые объекты) нет места для объекта, который вы хотите создать.

  • В последнем случае это будет, когда объем свободной памяти в (обычно) пространстве Eden падает ниже (настраиваемого) порогового уровня.

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

0 голосов
/ 24 марта 2012

Запустите ваше приложение с опцией -verbose: gc, и вы увидите журналы всей сборки мусора, сброшенной на экран, которая даст вам хорошее представление о том, что происходит на виртуальной машине.

Вы также можете использовать Visual VM для мониторинга поведения.

...