Когда G1 G C будет выделять объекты в старом поколении напрямую - PullRequest
2 голосов
/ 31 января 2020

В моем журнале g c есть много объектов, выделенных старым поколениям (журналы ALLO C (Старые)), текущий порог 15, возраст моих объектов только 1, то есть эти объекты не будут повышен до старых поколений, я думаю, есть ли условия, когда объекты будут выделяться старым поколениям непосредственно в G1 G C? Заранее спасибо!

Выдержка из G C log:

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, смешанный режим)

********* Обновление от 2020/01/31 *********** *****

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

>> 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

1 Ответ

2 голосов
/ 31 января 2020

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

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

РЕДАКТИРОВАТЬ

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

...