Soft Reference в роли GC в Java - PullRequest
0 голосов
/ 11 мая 2018

Недавно я наткнулся на эту статью, в которой GC настраивает Jenkins, в которой говорится об этом параметре: -XX: SoftRefLRUPolicyMSPerMB

https://jenkins.io/blog/2016/11/21/gc-tuning/

Я понимаю, что это предотвращает ошибку OOM, потому что очищает объект Soft Reference, когда достигает порогового значения.

1) Что означает этот порог (по умолчанию = 1000 мс в -XX: SoftRefLRUPolicyMSPerMB)? Что означает это значение?

2) Кажется, у моих Дженкинса 80% мягкой ссылки (наблюдается с помощью HProf)

3) Как предложено в приведенной выше статье, если я уменьшу этот флаг -XX: SoftRefLRUPolicyMSPerMB до 10 мсек, что будет последствием?

ПРИМЕЧАНИЕ: мы используем G1GC

Спасибо
Гарри

1 Ответ

0 голосов
/ 11 мая 2018

1) Из Oracle :

Начиная с 1.3.1, легко достижимые объекты останутся живыми некоторое время после того, как в последний раз на них ссылались. значение по умолчанию - одна секунда жизни на свободный мегабайт в куче. Это значение можно настроить с помощью флага -XX: SoftRefLRUPolicyMSPerMB, который принимает целочисленные значения, представляющие миллисекунды. Например, чтобы изменить значение от одной секунды до 2,5 секунд, используйте этот флаг:

-XX: SoftRefLRUPolicyMSPerMB = 2500

3) Я имею в виду, это конкретно сказано в статье, на которую вы ссылались. Возможно, вы освободите кучу пространства, потенциально жертвуя некоторой производительностью. Что еще мы можем вам сказать?

Если Дженкинс потребляет слишком много памяти старого поколения, это может помочь сделать мягкие ссылки проще, уменьшив -XX:SoftRefLRUPolicyMSPerMB от значения по умолчанию (1000) до чего-то меньшего (скажем, 10-200). Подвох в том, что SoftReferences часто используются для объектов, которые относительно дороги для загрузки, такие как лениво загруженные строить записи и передавать данные FlowNode

...