586 // Notification for eagerly reclaimed regions to do extra clean up.
587 void humongous_object_eagerly_reclaimed(G1HeapRegion* r);
588 // Manipulation of the global mark stack.
589 // The push and pop operations are used by tasks for transfers
590 // between task-local queues and the global mark stack.
591 bool mark_stack_push(G1TaskQueueEntry* arr) {
592 if (!_global_mark_stack.par_push_chunk(arr)) {
593 set_has_overflown();
594 return false;
595 }
596 return true;
597 }
598 bool mark_stack_pop(G1TaskQueueEntry* arr) {
599 return _global_mark_stack.par_pop_chunk(arr);
600 }
601 size_t mark_stack_size() const { return _global_mark_stack.size(); }
602 size_t partial_mark_stack_size_target() const { return _global_mark_stack.capacity() / 3; }
603 bool mark_stack_empty() const { return _global_mark_stack.is_empty(); }
604
605 void concurrent_cycle_start();
606 // Abandon current marking iteration due to a Full GC.
607 bool concurrent_cycle_abort();
608 void concurrent_cycle_end(bool mark_cycle_completed);
609
610 // Notifies marking threads to abort. This is a best-effort notification. Does not
611 // guarantee or update any state after the call. Root region scan must not be
612 // running or being aborted.
613 void abort_marking_threads();
614
615 // Total cpu time spent in mark worker threads in seconds.
616 double worker_threads_cpu_time_s();
617
618 // Attempts to steal an object from the task queues of other tasks
619 bool try_stealing(uint worker_id, G1TaskQueueEntry& task_entry);
620
621 G1ConcurrentMark(G1CollectedHeap* g1h,
622 G1RegionToSpaceMapper* bitmap_storage);
623 ~G1ConcurrentMark();
624
625 G1CMBitMap* mark_bitmap() const { return (G1CMBitMap*)&_mark_bitmap; }
|
586 // Notification for eagerly reclaimed regions to do extra clean up.
587 void humongous_object_eagerly_reclaimed(G1HeapRegion* r);
588 // Manipulation of the global mark stack.
589 // The push and pop operations are used by tasks for transfers
590 // between task-local queues and the global mark stack.
591 bool mark_stack_push(G1TaskQueueEntry* arr) {
592 if (!_global_mark_stack.par_push_chunk(arr)) {
593 set_has_overflown();
594 return false;
595 }
596 return true;
597 }
598 bool mark_stack_pop(G1TaskQueueEntry* arr) {
599 return _global_mark_stack.par_pop_chunk(arr);
600 }
601 size_t mark_stack_size() const { return _global_mark_stack.size(); }
602 size_t partial_mark_stack_size_target() const { return _global_mark_stack.capacity() / 3; }
603 bool mark_stack_empty() const { return _global_mark_stack.is_empty(); }
604
605 void concurrent_cycle_start();
606 bool shutdown_cleanup_needed() const;
607 void shutdown_concurrent_cycle();
608 // Abandon current marking iteration due to a Full GC.
609 bool concurrent_cycle_abort();
610 void concurrent_cycle_end(bool mark_cycle_completed);
611
612 // Notifies marking threads to abort. This is a best-effort notification. Does not
613 // guarantee or update any state after the call. Root region scan must not be
614 // running or being aborted.
615 void abort_marking_threads();
616
617 // Total cpu time spent in mark worker threads in seconds.
618 double worker_threads_cpu_time_s();
619
620 // Attempts to steal an object from the task queues of other tasks
621 bool try_stealing(uint worker_id, G1TaskQueueEntry& task_entry);
622
623 G1ConcurrentMark(G1CollectedHeap* g1h,
624 G1RegionToSpaceMapper* bitmap_storage);
625 ~G1ConcurrentMark();
626
627 G1CMBitMap* mark_bitmap() const { return (G1CMBitMap*)&_mark_bitmap; }
|