Когда G1 GC будет напрямую размещать объекты в старом поколении

В моем журнале gc есть много объектов, выделенных старым поколениям (журналы ALLOC(Old)), текущий порог 15, возраст моих объектов всего 1, т.е. эти объекты не будут повышены до старых поколений, я думаю, есть какое-либо условие, при котором объекты будут распределяться по старым поколениям непосредственно в G1 GC? Заранее спасибо!

Выдержка из журнала GC:

grep "ALLOC(Old)" gc.log | wc -l

387

grep "thres" gc.log

Desired survivor size 1207959552 bytes, new threshold 15 (max 15)

Desired survivor size 1207959552 bytes, new threshold 15 (max 15)

- age   1:   37707272 bytes,   37707272 total

Версия JDK:

  • openjdk версия "1.8.0_222"

  • Среда выполнения OpenJDK (сборка 1.8.0_222-b10)

  • 64-разрядная виртуальная машина сервера OpenJDK (сборка 25.222-b10, смешанный режим)

*********Обновление от 31.01.2020******************

Это не огромные объекты, журнал gc покажет распределение огромных объектов другим способом, пожалуйста, обратитесь к следующей выдержке из журнала gc, спасибо!

>> grep "StartsH" gc.log | wc -l

51

>> grep "ContinuesH" gc.log | wc -l

324

>> grep "ALLOC(Old)" gc.log | wc -l

528

Ссылка: https://www.redhat.com/en/blog/collecting-and-reading-g1-garbage-collector-logs-part-2


person Roy Zhang    schedule 31.01.2020    source источник


Ответы (1)


Это происходит, когда выделяется большой объект (50% и более из одного региона). Даже в исходном коде есть комментарий, говорящий, что.

Просто помните, что массивы тоже являются объектами, поэтому, когда вы выделяете большой массив примитивов, вы можете попасть в эту категорию. При этом у вас есть самая последняя версия JVM, в которой эти очень большие объекты могут быть восстановлены как часть молодой коллекции.

ИЗМЕНИТЬ

ALLOC(OLD) не означает, что ваше приложение начало выделять объекты в старом поколении. Это просто означает, что этот конкретный регион начал использоваться во время этого цикла GC. вот объявление метода и вот его использование в методе под названием G1CollectedHeap::new_gc_alloc_region - очень подходящее имя IMO.

person Eugene    schedule 31.01.2020
comment
Спасибо за ваши комментарии! На самом деле это не огромные объекты, журнал gc покажет распределение огромных объектов по-другому, пожалуйста, обратитесь к следующей выдержке из журнала gc, спасибо! # grep StartsH gc.log | wc -l 51 # grep продолжает H gc.log | wc -l 324 # grep ALLOC(старый) gc.log | wc -l 528 Ссылка: redhat.com/en/blog/ - person Roy Zhang; 31.01.2020