< prev index next >

src/hotspot/share/gc/z/zRootsIterator.cpp

Print this page
rev 50539 : [mq]: 8204613-stringtable-unclean-fix

*** 305,318 **** --- 305,320 ---- _symbol_table(this), _string_table(this) { assert(SafepointSynchronize::is_at_safepoint(), "Should be at safepoint"); ZStatTimer timer(ZSubPhasePauseWeakRootsSetup); SymbolTable::clear_parallel_claimed_index(); + StringTable::reset_dead_counter(); } ZWeakRootsIterator::~ZWeakRootsIterator() { ZStatTimer timer(ZSubPhasePauseWeakRootsTeardown); + StringTable::finish_dead_counter(); } void ZWeakRootsIterator::do_vm_weak_handles(BoolObjectClosure* is_alive, OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseWeakRootsVMWeakHandles); _vm_weak_handles_iter.weak_oops_do(is_alive, cl);
*** 339,351 **** ZStatTimer timer(ZSubPhasePauseWeakRootsSymbolTable); int dummy; SymbolTable::possibly_parallel_unlink(&dummy, &dummy); } void ZWeakRootsIterator::do_string_table(BoolObjectClosure* is_alive, OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseWeakRootsStringTable); ! _string_table_iter.weak_oops_do(is_alive, cl); } void ZWeakRootsIterator::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseWeakRoots); if (ZSymbolTableUnloading) { --- 341,378 ---- ZStatTimer timer(ZSubPhasePauseWeakRootsSymbolTable); int dummy; SymbolTable::possibly_parallel_unlink(&dummy, &dummy); } + class ZStringTableDeadCounterBoolObjectClosure : public BoolObjectClosure { + private: + BoolObjectClosure* const _cl; + size_t _ndead; + + public: + ZStringTableDeadCounterBoolObjectClosure(BoolObjectClosure* cl) : + _cl(cl), + _ndead(0) {} + + ~ZStringTableDeadCounterBoolObjectClosure() { + StringTable::inc_dead_counter(_ndead); + } + + virtual bool do_object_b(oop obj) { + if (_cl->do_object_b(obj)) { + return true; + } + + _ndead++; + return false; + } + }; + void ZWeakRootsIterator::do_string_table(BoolObjectClosure* is_alive, OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseWeakRootsStringTable); ! ZStringTableDeadCounterBoolObjectClosure counter_is_alive(is_alive); ! _string_table_iter.weak_oops_do(&counter_is_alive, cl); } void ZWeakRootsIterator::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseWeakRoots); if (ZSymbolTableUnloading) {
*** 375,385 **** _vm_weak_handles_iter(SystemDictionary::vm_weak_oop_storage()), _jni_weak_handles_iter(JNIHandles::weak_global_handles()), _string_table_iter(StringTable::weak_storage()), _vm_weak_handles(this), _jni_weak_handles(this), ! _string_table(this) {} void ZConcurrentWeakRootsIterator::do_vm_weak_handles(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsVMWeakHandles); _vm_weak_handles_iter.oops_do(cl); } --- 402,418 ---- _vm_weak_handles_iter(SystemDictionary::vm_weak_oop_storage()), _jni_weak_handles_iter(JNIHandles::weak_global_handles()), _string_table_iter(StringTable::weak_storage()), _vm_weak_handles(this), _jni_weak_handles(this), ! _string_table(this) { ! StringTable::reset_dead_counter(); ! } ! ! ZConcurrentWeakRootsIterator::~ZConcurrentWeakRootsIterator() { ! StringTable::finish_dead_counter(); ! } void ZConcurrentWeakRootsIterator::do_vm_weak_handles(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsVMWeakHandles); _vm_weak_handles_iter.oops_do(cl); }
*** 387,399 **** void ZConcurrentWeakRootsIterator::do_jni_weak_handles(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsJNIWeakHandles); _jni_weak_handles_iter.oops_do(cl); } void ZConcurrentWeakRootsIterator::do_string_table(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsStringTable); ! _string_table_iter.oops_do(cl); } void ZConcurrentWeakRootsIterator::oops_do(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRoots); if (ZWeakRoots) { --- 420,459 ---- void ZConcurrentWeakRootsIterator::do_jni_weak_handles(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsJNIWeakHandles); _jni_weak_handles_iter.oops_do(cl); } + class ZStringTableDeadCounterOopClosure : public OopClosure { + private: + OopClosure* const _cl; + size_t _ndead; + + public: + ZStringTableDeadCounterOopClosure(OopClosure* cl) : + _cl(cl), + _ndead(0) {} + + ~ZStringTableDeadCounterOopClosure() { + StringTable::inc_dead_counter(_ndead); + } + + virtual void do_oop(oop* p) { + _cl->do_oop(p); + if (*p == NULL) { + _ndead++; + } + } + + virtual void do_oop(narrowOop* p) { + ShouldNotReachHere(); + } + }; + void ZConcurrentWeakRootsIterator::do_string_table(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRootsStringTable); ! ZStringTableDeadCounterOopClosure counter_cl(cl); ! _string_table_iter.oops_do(&counter_cl); } void ZConcurrentWeakRootsIterator::oops_do(OopClosure* cl) { ZStatTimer timer(ZSubPhaseConcurrentWeakRoots); if (ZWeakRoots) {
< prev index next >