536 }
537
538 OopTaskQueueSet* _task_queues;
539
540 // Overflow list of grey objects, threaded through mark-word
541 // Manipulated with CAS in the parallel/multi-threaded case.
542 oopDesc* volatile _overflow_list;
543 // The following array-pair keeps track of mark words
544 // displaced for accommodating overflow list above.
545 // This code will likely be revisited under RFE#4922830.
546 Stack<oop, mtGC> _preserved_oop_stack;
547 Stack<markOop, mtGC> _preserved_mark_stack;
548
549 int* _hash_seed;
550
551 // In support of multi-threaded concurrent phases
552 YieldingFlexibleWorkGang* _conc_workers;
553
554 // Performance Counters
555 CollectorCounters* _gc_counters;
556
557 // Initialization Errors
558 bool _completed_initialization;
559
560 // In support of ExplicitGCInvokesConcurrent
561 static bool _full_gc_requested;
562 static GCCause::Cause _full_gc_cause;
563 unsigned int _collection_count_start;
564
565 // Should we unload classes this concurrent cycle?
566 bool _should_unload_classes;
567 unsigned int _concurrent_cycles_since_last_unload;
568 unsigned int concurrent_cycles_since_last_unload() const {
569 return _concurrent_cycles_since_last_unload;
570 }
571 // Did we (allow) unload classes in the previous concurrent cycle?
572 bool unloaded_classes_last_cycle() const {
573 return concurrent_cycles_since_last_unload() == 0;
574 }
575 // Root scanning options for perm gen
911
912 CMSBitMap* markBitMap() { return &_markBitMap; }
913 void directAllocated(HeapWord* start, size_t size);
914
915 // Main CMS steps and related support
916 void checkpointRootsInitial();
917 bool markFromRoots(); // a return value of false indicates failure
918 // due to stack overflow
919 void preclean();
920 void checkpointRootsFinal();
921 void sweep();
922
923 // Check that the currently executing thread is the expected
924 // one (foreground collector or background collector).
925 static void check_correct_thread_executing() PRODUCT_RETURN;
926
927 NOT_PRODUCT(bool is_cms_reachable(HeapWord* addr);)
928
929 // Performance Counter Support
930 CollectorCounters* counters() { return _gc_counters; }
931
932 // Timer stuff
933 void startTimer() { assert(!_timer.is_active(), "Error"); _timer.start(); }
934 void stopTimer() { assert( _timer.is_active(), "Error"); _timer.stop(); }
935 void resetTimer() { assert(!_timer.is_active(), "Error"); _timer.reset(); }
936 jlong timerTicks() { assert(!_timer.is_active(), "Error"); return _timer.ticks(); }
937
938 int yields() { return _numYields; }
939 void resetYields() { _numYields = 0; }
940 void incrementYields() { _numYields++; }
941 void resetNumDirtyCards() { _numDirtyCards = 0; }
942 void incrementNumDirtyCards(size_t num) { _numDirtyCards += num; }
943 size_t numDirtyCards() { return _numDirtyCards; }
944
945 static bool foregroundGCShouldWait() { return _foregroundGCShouldWait; }
946 static void set_foregroundGCShouldWait(bool v) { _foregroundGCShouldWait = v; }
947 static bool foregroundGCIsActive() { return _foregroundGCIsActive; }
948 static void set_foregroundGCIsActive(bool v) { _foregroundGCIsActive = v; }
949 size_t sweep_count() const { return _sweep_count; }
950 void increment_sweep_count() { _sweep_count++; }
|
536 }
537
538 OopTaskQueueSet* _task_queues;
539
540 // Overflow list of grey objects, threaded through mark-word
541 // Manipulated with CAS in the parallel/multi-threaded case.
542 oopDesc* volatile _overflow_list;
543 // The following array-pair keeps track of mark words
544 // displaced for accommodating overflow list above.
545 // This code will likely be revisited under RFE#4922830.
546 Stack<oop, mtGC> _preserved_oop_stack;
547 Stack<markOop, mtGC> _preserved_mark_stack;
548
549 int* _hash_seed;
550
551 // In support of multi-threaded concurrent phases
552 YieldingFlexibleWorkGang* _conc_workers;
553
554 // Performance Counters
555 CollectorCounters* _gc_counters;
556 CollectorCounters* _cgc_counters;
557
558 // Initialization Errors
559 bool _completed_initialization;
560
561 // In support of ExplicitGCInvokesConcurrent
562 static bool _full_gc_requested;
563 static GCCause::Cause _full_gc_cause;
564 unsigned int _collection_count_start;
565
566 // Should we unload classes this concurrent cycle?
567 bool _should_unload_classes;
568 unsigned int _concurrent_cycles_since_last_unload;
569 unsigned int concurrent_cycles_since_last_unload() const {
570 return _concurrent_cycles_since_last_unload;
571 }
572 // Did we (allow) unload classes in the previous concurrent cycle?
573 bool unloaded_classes_last_cycle() const {
574 return concurrent_cycles_since_last_unload() == 0;
575 }
576 // Root scanning options for perm gen
912
913 CMSBitMap* markBitMap() { return &_markBitMap; }
914 void directAllocated(HeapWord* start, size_t size);
915
916 // Main CMS steps and related support
917 void checkpointRootsInitial();
918 bool markFromRoots(); // a return value of false indicates failure
919 // due to stack overflow
920 void preclean();
921 void checkpointRootsFinal();
922 void sweep();
923
924 // Check that the currently executing thread is the expected
925 // one (foreground collector or background collector).
926 static void check_correct_thread_executing() PRODUCT_RETURN;
927
928 NOT_PRODUCT(bool is_cms_reachable(HeapWord* addr);)
929
930 // Performance Counter Support
931 CollectorCounters* counters() { return _gc_counters; }
932 CollectorCounters* cgc_counters() { return _cgc_counters; }
933
934 // Timer stuff
935 void startTimer() { assert(!_timer.is_active(), "Error"); _timer.start(); }
936 void stopTimer() { assert( _timer.is_active(), "Error"); _timer.stop(); }
937 void resetTimer() { assert(!_timer.is_active(), "Error"); _timer.reset(); }
938 jlong timerTicks() { assert(!_timer.is_active(), "Error"); return _timer.ticks(); }
939
940 int yields() { return _numYields; }
941 void resetYields() { _numYields = 0; }
942 void incrementYields() { _numYields++; }
943 void resetNumDirtyCards() { _numDirtyCards = 0; }
944 void incrementNumDirtyCards(size_t num) { _numDirtyCards += num; }
945 size_t numDirtyCards() { return _numDirtyCards; }
946
947 static bool foregroundGCShouldWait() { return _foregroundGCShouldWait; }
948 static void set_foregroundGCShouldWait(bool v) { _foregroundGCShouldWait = v; }
949 static bool foregroundGCIsActive() { return _foregroundGCIsActive; }
950 static void set_foregroundGCIsActive(bool v) { _foregroundGCIsActive = v; }
951 size_t sweep_count() const { return _sweep_count; }
952 void increment_sweep_count() { _sweep_count++; }
|