Java CMS GC: может незначительные GC происходят между конечным замечанием и одновременной разверткой?

голоса
0

Final remark гарантирует, что все живые объекты отмечены.

Concurrent sweepудаляет мусор.

Мое предположение состоит в том , что JVM гарантирует , что незначительные дс не будет работать между final remarkфазой и concurrent sweepфазой в противном случае есть одно замечание , чтобы быть выполнены для того , чтобы отслеживать объекты , которые были только продвигаемых к старому дс. Является ли мое предположение верно?

Задан 04/05/2017 в 17:09
пользователем
На других языках...                            


1 ответов

голоса
1

Простой взгляд на журналы GC может опровергнуть это.

271943.846: [CMS-concurrent-sweep-start]
271944.597: [GC (Allocation Failure) 271944.597: [ParNew: 608366K->59226K(613440K), 0.0947925 secs] 1715658K->1185554K(2399176K), 0.0948642 secs] [Times: user=0.45 sys=0.02, real=0.09 secs] 
271945.562: [GC (Allocation Failure) 271945.562: [ParNew: 604570K->52122K(613440K), 0.0845590 secs] 1540676K->1007710K(2399176K), 0.0846276 secs] [Times: user=0.38 sys=0.02, real=0.09 secs] 
271945.694: [CMS-concurrent-sweep: 1.666/1.848 secs] [Times: user=7.65 sys=0.91, real=1.85 secs] 

Как вы видите, молодые коллекции происходят между параллельным началом и концом развертки.

Является ли мое предположение верно?

Вы не рассматривали несколько возможностей

  • молодые коллекции приостановить зачистку и следить за повышения так, что нити развертки могут пропустить продвигаемый набор, когда резюме
  • продвижение передается атомарно
  • во время одновременного продвижения развертки происходит в области памяти, которые не будут тронуты развертки
Ответил 04/05/2017 в 20:12
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more