Пространство PS Survivour почти полное

Я вижу, что оставшееся пространство PS почти заполнено (98%) в большинстве случаев для моего приложения. Я не знаю, что такое выжившее PS место. Это нормально? Что нужно делать в таких сценариях? Может кто-то объяснит. Спасибо заранее:)

Ответ 1

Сначала см., например, здесь: Что такое пространство для оставшихся в живых?

Как правило, в части YoungGeneration кучи (например, для Hostpot VM) имеется 2 оставшихся в живых места. Они предназначены для того, чтобы объекты зрелые, прежде чем продвигать их в "Старое поколение". Потому что его более дорогостоящее очищение старого поколения.

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

Как только у вас есть данные, найдите:

  • переполнение пространства выживших - это происходит, когда пространство для оставшихся в живых слишком мало, чтобы объекты могли созревать между коллекциями YoungHeap, и объекты переполняются в OldGeneration, не имея времени на зрение (и умереть, прежде чем продвигаться).

  • распределить распределение -XX:+PrintTenuringDistribution. Чтобы узнать, насколько быстро созревают объекты.

ОБНОВЛЕНИЕ: Прочтите "Справочник по управлению памятью Hotspot" и см. раздел Серийный коллекционер. > , есть хорошие объяснения пространств выживания:

Примечание. Если пространство Кому заполняется, объекты live из Eden или От, которые не были скопированные на него tenured, независимо от того, сколько семейств молодого поколения они выжили. Любые объекты, оставшиеся в Eden или От после копирования живых объектов, по определению не живут, и их не нужно проверять.