Вопросы о g1 g c на предварительной записи барьера - PullRequest
2 голосов
/ 17 января 2020

Мне сказали, когда в jvm была изменена ссылка, при использовании g1 g c будет вставлен барьер предварительной записи для соответствующего изменения набора запоминания, но где находится код? я проверяю реализацию байт-кода, такую ​​как Puttati c, но я не могу найти, где происходит предварительный барьер? где и как доза g1 g c вставить барьер предварительной записи?

1 Ответ

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

Вероятно, уже очевидно из комментария Хольгера, но это не будет присутствовать на уровне байт-кода, а будет сгенерировано JIT.

Лучшее объяснение в самом исходном коде, который в некоторых случаях отлично и время от времени очень ясно:

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

Вы также можете найти, какие запомненные наборы , например, , или как они построены.

И здесь - это метод post_barrier, используемый C2 компилятором. Хотя некоторые вещи, которые я могу понять из этого исходного кода, некоторые слишком сложны для меня, поэтому я рад читать код :)

...