< prev index next >

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


*** 23,32 **** --- 23,33 ---- #ifndef SHARE_GC_Z_ZROOTSITERATOR_HPP #define SHARE_GC_Z_ZROOTSITERATOR_HPP #include "gc/shared/oopStorageParState.hpp" + #include "gc/shared/suspendibleThreadSet.hpp" #include "memory/allocation.hpp" #include "memory/iterator.hpp" #include "runtime/thread.hpp" #include "utilities/globalDefinitions.hpp" ***************
*** 35,46 **** virtual void do_thread(Thread* thread) { thread->oops_do(this, NULL); } }; ! typedef OopStorage::ParState<false /* concurrent */, false /* is_const */> ZOopStorageIterator; ! typedef OopStorage::ParState<true /* concurrent */, false /* is_const */> ZConcurrentOopStorageIterator; template <typename T, void (T::*F)(ZRootsIteratorClosure*)> class ZSerialOopsDo { private: T* const _iter; --- 36,46 ---- virtual void do_thread(Thread* thread) { thread->oops_do(this, NULL); } }; ! typedef OopStorage::ParState<true /* concurrent */, false /* is_const */> ZOopStorageIterator; template <typename T, void (T::*F)(ZRootsIteratorClosure*)> class ZSerialOopsDo { private: T* const _iter; ***************
*** 84,124 **** void weak_oops_do(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); }; class ZRootsIterator { private: - ZOopStorageIterator _jni_handles_iter; - void do_universe(ZRootsIteratorClosure* cl); - void do_jni_handles(ZRootsIteratorClosure* cl); void do_object_synchronizer(ZRootsIteratorClosure* cl); void do_management(ZRootsIteratorClosure* cl); void do_jvmti_export(ZRootsIteratorClosure* cl); void do_jvmti_weak_export(ZRootsIteratorClosure* cl); void do_system_dictionary(ZRootsIteratorClosure* cl); - void do_class_loader_data_graph(ZRootsIteratorClosure* cl); void do_threads(ZRootsIteratorClosure* cl); void do_code_cache(ZRootsIteratorClosure* cl); ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_universe> _universe; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_object_synchronizer> _object_synchronizer; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_management> _management; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_export> _jvmti_export; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_weak_export> _jvmti_weak_export; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_system_dictionary> _system_dictionary; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_jni_handles> _jni_handles; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_class_loader_data_graph> _class_loader_data_graph; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_threads> _threads; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_code_cache> _code_cache; public: ZRootsIterator(); ~ZRootsIterator(); void oops_do(ZRootsIteratorClosure* cl, bool visit_jvmti_weak_export = false); }; class ZWeakRootsIterator { private: void do_jvmti_weak_export(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); void do_jfr_weak(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); --- 84,137 ---- void weak_oops_do(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); }; class ZRootsIterator { private: void do_universe(ZRootsIteratorClosure* cl); void do_object_synchronizer(ZRootsIteratorClosure* cl); void do_management(ZRootsIteratorClosure* cl); void do_jvmti_export(ZRootsIteratorClosure* cl); void do_jvmti_weak_export(ZRootsIteratorClosure* cl); void do_system_dictionary(ZRootsIteratorClosure* cl); void do_threads(ZRootsIteratorClosure* cl); void do_code_cache(ZRootsIteratorClosure* cl); ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_universe> _universe; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_object_synchronizer> _object_synchronizer; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_management> _management; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_export> _jvmti_export; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_jvmti_weak_export> _jvmti_weak_export; ! ZSerialOopsDo<ZRootsIterator, &ZRootsIterator::do_system_dictionary> _system_dictionary; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_threads> _threads; ! ZParallelOopsDo<ZRootsIterator, &ZRootsIterator::do_code_cache> _code_cache; public: ZRootsIterator(); ~ZRootsIterator(); void oops_do(ZRootsIteratorClosure* cl, bool visit_jvmti_weak_export = false); }; + class ZConcurrentRootsIterator { + private: + bool _marking; + SuspendibleThreadSetJoiner _sts_joiner; + ZOopStorageIterator _jni_handles_iter; + + void do_jni_handles(ZRootsIteratorClosure* cl); + void do_class_loader_data_graph(ZRootsIteratorClosure* cl); + + ZParallelOopsDo<ZConcurrentRootsIterator, &ZConcurrentRootsIterator::do_jni_handles> _jni_handles; + ZParallelOopsDo<ZConcurrentRootsIterator, &ZConcurrentRootsIterator::do_class_loader_data_graph> _class_loader_data_graph; + + public: + ZConcurrentRootsIterator(bool claim_clds); + ~ZConcurrentRootsIterator(); + + void oops_do(ZRootsIteratorClosure* cl); + }; + class ZWeakRootsIterator { private: void do_jvmti_weak_export(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); void do_jfr_weak(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl); ***************
*** 133,145 **** void oops_do(ZRootsIteratorClosure* cl); }; class ZConcurrentWeakRootsIterator { private: ! ZConcurrentOopStorageIterator _vm_weak_handles_iter; ! ZConcurrentOopStorageIterator _jni_weak_handles_iter; ! ZConcurrentOopStorageIterator _string_table_iter; void do_vm_weak_handles(ZRootsIteratorClosure* cl); void do_jni_weak_handles(ZRootsIteratorClosure* cl); void do_string_table(ZRootsIteratorClosure* cl); --- 146,158 ---- void oops_do(ZRootsIteratorClosure* cl); }; class ZConcurrentWeakRootsIterator { private: ! ZOopStorageIterator _vm_weak_handles_iter; ! ZOopStorageIterator _jni_weak_handles_iter; ! ZOopStorageIterator _string_table_iter; void do_vm_weak_handles(ZRootsIteratorClosure* cl); void do_jni_weak_handles(ZRootsIteratorClosure* cl); void do_string_table(ZRootsIteratorClosure* cl);
< prev index next >