49 #include "gc/shared/taskqueue.inline.hpp" |
49 #include "gc/shared/taskqueue.inline.hpp" |
50 #include "gc/shared/weakProcessor.hpp" |
50 #include "gc/shared/weakProcessor.hpp" |
51 #include "gc/shared/workgroup.hpp" |
51 #include "gc/shared/workgroup.hpp" |
52 #include "logging/log.hpp" |
52 #include "logging/log.hpp" |
53 #include "logging/logStream.hpp" |
53 #include "logging/logStream.hpp" |
|
54 #include "memory/iterator.inline.hpp" |
54 #include "memory/resourceArea.hpp" |
55 #include "memory/resourceArea.hpp" |
55 #include "oops/access.inline.hpp" |
56 #include "oops/access.inline.hpp" |
56 #include "oops/compressedOops.inline.hpp" |
57 #include "oops/compressedOops.inline.hpp" |
57 #include "oops/objArrayOop.hpp" |
58 #include "oops/objArrayOop.hpp" |
58 #include "oops/oop.inline.hpp" |
59 #include "oops/oop.inline.hpp" |
500 ParScanThreadState* par_scan_state) : |
501 ParScanThreadState* par_scan_state) : |
501 OopsInClassLoaderDataOrGenClosure(g), _par_scan_state(par_scan_state), _g(g) { |
502 OopsInClassLoaderDataOrGenClosure(g), _par_scan_state(par_scan_state), _g(g) { |
502 _boundary = _g->reserved().end(); |
503 _boundary = _g->reserved().end(); |
503 } |
504 } |
504 |
505 |
505 void ParScanWithBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, true, false); } |
|
506 void ParScanWithBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, true, false); } |
|
507 |
|
508 void ParScanWithoutBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, false, false); } |
|
509 void ParScanWithoutBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, false, false); } |
|
510 |
|
511 void ParRootScanWithBarrierTwoGensClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, true, true); } |
506 void ParRootScanWithBarrierTwoGensClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, true, true); } |
512 void ParRootScanWithBarrierTwoGensClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, true, true); } |
507 void ParRootScanWithBarrierTwoGensClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, true, true); } |
513 |
508 |
514 void ParRootScanWithoutBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, false, true); } |
509 void ParRootScanWithoutBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, false, true); } |
515 void ParRootScanWithoutBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, false, true); } |
510 void ParRootScanWithoutBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, false, true); } |
516 |
511 |
517 ParScanWeakRefClosure::ParScanWeakRefClosure(ParNewGeneration* g, |
512 ParScanWeakRefClosure::ParScanWeakRefClosure(ParNewGeneration* g, |
518 ParScanThreadState* par_scan_state) |
513 ParScanThreadState* par_scan_state) |
519 : ScanWeakRefClosure(g), _par_scan_state(par_scan_state) |
514 : ScanWeakRefClosure(g), _par_scan_state(par_scan_state) |
520 {} |
515 {} |
521 |
|
522 void ParScanWeakRefClosure::do_oop(oop* p) { ParScanWeakRefClosure::do_oop_work(p); } |
|
523 void ParScanWeakRefClosure::do_oop(narrowOop* p) { ParScanWeakRefClosure::do_oop_work(p); } |
|
524 |
516 |
525 #ifdef WIN32 |
517 #ifdef WIN32 |
526 #pragma warning(disable: 4786) /* identifier was truncated to '255' characters in the browser information */ |
518 #pragma warning(disable: 4786) /* identifier was truncated to '255' characters in the browser information */ |
527 #endif |
519 #endif |
528 |
520 |
689 // as a weak reference. |
681 // as a weak reference. |
690 assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); |
682 assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); |
691 } |
683 } |
692 #endif // ASSERT |
684 #endif // ASSERT |
693 |
685 |
694 _par_cl->do_oop_nv(p); |
686 Devirtualizer::do_oop_no_verify(_par_cl, p); |
695 |
687 |
696 if (CMSHeap::heap()->is_in_reserved(p)) { |
688 if (CMSHeap::heap()->is_in_reserved(p)) { |
697 oop obj = RawAccess<IS_NOT_NULL>::oop_load(p);; |
689 oop obj = RawAccess<IS_NOT_NULL>::oop_load(p);; |
698 _rs->write_ref_field_gc_par(p, obj); |
690 _rs->write_ref_field_gc_par(p, obj); |
699 } |
691 } |
715 // as a weak reference. |
707 // as a weak reference. |
716 assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); |
708 assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); |
717 } |
709 } |
718 #endif // ASSERT |
710 #endif // ASSERT |
719 |
711 |
720 _cl->do_oop_nv(p); |
712 Devirtualizer::do_oop_no_verify(_cl, p); |
721 |
713 |
722 if (CMSHeap::heap()->is_in_reserved(p)) { |
714 if (CMSHeap::heap()->is_in_reserved(p)) { |
723 oop obj = RawAccess<IS_NOT_NULL>::oop_load(p); |
715 oop obj = RawAccess<IS_NOT_NULL>::oop_load(p); |
724 _rs->write_ref_field_gc_par(p, obj); |
716 _rs->write_ref_field_gc_par(p, obj); |
725 } |
717 } |