< prev index next >

src/hotspot/share/gc/g1/g1CollectedHeap.cpp

Print this page

        

*** 3530,3539 **** --- 3530,3540 ---- // To minimize the remark pause times, the tasks below are done in parallel. class G1ParallelCleaningTask : public AbstractGangTask { private: + bool _unloading_occurred; G1StringAndSymbolCleaningTask _string_symbol_task; G1CodeCacheUnloadingTask _code_cache_task; G1KlassCleaningTask _klass_cleaning_task; G1ResolvedMethodCleaningTask _resolved_method_cleaning_task;
*** 3542,3551 **** --- 3543,3553 ---- G1ParallelCleaningTask(BoolObjectClosure* is_alive, uint num_workers, bool unloading_occurred) : AbstractGangTask("Parallel Cleaning"), _string_symbol_task(is_alive, true, true, G1StringDedup::is_enabled()), _code_cache_task(num_workers, is_alive, unloading_occurred), _klass_cleaning_task(), + _unloading_occurred(unloading_occurred), _resolved_method_cleaning_task() { } // The parallel work done by all worker threads. void work(uint worker_id) {
*** 3567,3578 **** --- 3569,3584 ---- // Do the second code cache cleaning work, which realize on // the liveness information gathered during the first pass. _code_cache_task.work_second_pass(worker_id); // Clean all klasses that were not unloaded. + // The weak metadata in klass doesn't need to be + // processed if there was no unloading. + if (_unloading_occurred) { _klass_cleaning_task.work(); } + } }; void G1CollectedHeap::complete_cleaning(BoolObjectClosure* is_alive, bool class_unloading_occurred) {
< prev index next >