equal
deleted
inserted
replaced
1591 AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") { |
1591 AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") { |
1592 } |
1592 } |
1593 |
1593 |
1594 void work(uint worker_id) { |
1594 void work(uint worker_id) { |
1595 ShenandoahEvacOOMScope oom; |
1595 ShenandoahEvacOOMScope oom; |
1596 ShenandoahEvacuateUpdateRootsClosure cl; |
1596 { |
1597 CLDToOopClosure clds(&cl, ClassLoaderData::_claim_strong); |
1597 // jni_roots and weak_roots are OopStorage backed roots, concurrent iteration |
1598 |
1598 // may race against OopStorage::release() calls. |
1599 _jni_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl); |
1599 ShenandoahEvacUpdateOopStorageRootsClosure cl; |
1600 _cld_roots.cld_do(&clds); |
1600 _jni_roots.oops_do<ShenandoahEvacUpdateOopStorageRootsClosure>(&cl); |
1601 _weak_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl); |
1601 _weak_roots.oops_do<ShenandoahEvacUpdateOopStorageRootsClosure>(&cl); |
|
1602 } |
|
1603 |
|
1604 { |
|
1605 ShenandoahEvacuateUpdateRootsClosure cl; |
|
1606 CLDToOopClosure clds(&cl, ClassLoaderData::_claim_strong); |
|
1607 _cld_roots.cld_do(&clds); |
|
1608 } |
1602 } |
1609 } |
1603 }; |
1610 }; |
1604 |
1611 |
1605 void ShenandoahHeap::op_roots() { |
1612 void ShenandoahHeap::op_roots() { |
1606 if (is_evacuation_in_progress() && |
1613 if (is_evacuation_in_progress() && |