48 friend class PSKeepAliveClosure;
49 friend class PSPromotionManager;
50
51 enum ScavengeSkippedCause {
52 not_skipped = 0,
53 to_space_not_empty,
54 promoted_too_large,
55 full_follows_scavenge
56 };
57
58 // Saved value of to_space->top(), used to prevent objects in to_space from
59 // being rescanned.
60 static HeapWord* _to_space_top_before_gc;
61
62 // Number of consecutive attempts to scavenge that were skipped
63 static int _consecutive_skipped_scavenges;
64
65
66 protected:
67 // Flags/counters
68 static SpanSubjectToDiscoveryClosure _span_discoverer;
69 static ReferenceProcessor* _ref_processor; // Reference processor for scavenging.
70 static PSIsAliveClosure _is_alive_closure; // Closure used for reference processing
71 static PSCardTable* _card_table; // We cache the card table for fast access.
72 static bool _survivor_overflow; // Overflow this collection
73 static uint _tenuring_threshold; // tenuring threshold for next scavenge
74 static elapsedTimer _accumulated_time; // total time spent on scavenge
75 static STWGCTimer _gc_timer; // GC time book keeper
76 static ParallelScavengeTracer _gc_tracer; // GC tracing
77 // The lowest address possible for the young_gen.
78 // This is used to decide if an oop should be scavenged,
79 // cards should be marked, etc.
80 static HeapWord* _young_generation_boundary;
81 // Used to optimize compressed oops young gen boundary checking.
82 static uintptr_t _young_generation_boundary_compressed;
83 static CollectorCounters* _counters; // collector performance counters
84
85 static void clean_up_failed_promotion();
86
87 static bool should_attempt_scavenge();
88
89 static HeapWord* to_space_top_before_gc() { return _to_space_top_before_gc; }
90 static inline void save_to_space_top_before_gc();
91
92 // Private accessors
93 static PSCardTable* const card_table() { assert(_card_table != NULL, "Sanity"); return _card_table; }
94 static const ParallelScavengeTracer* gc_tracer() { return &_gc_tracer; }
95
96 public:
97 // Accessors
98 static uint tenuring_threshold() { return _tenuring_threshold; }
99 static elapsedTimer* accumulated_time() { return &_accumulated_time; }
100 static int consecutive_skipped_scavenges()
101 { return _consecutive_skipped_scavenges; }
102
103 // Performance Counters
104 static CollectorCounters* counters() { return _counters; }
105
106 static void set_subject_to_discovery_span(MemRegion mr) {
107 _span_discoverer.set_span(mr);
108 }
109 // Used by scavenge_contents && psMarkSweep
110 static ReferenceProcessor* const reference_processor() {
111 assert(_ref_processor != NULL, "Sanity");
112 return _ref_processor;
113 }
114 // Used to add tasks
115 static GCTaskManager* const gc_task_manager();
116 // The promotion managers tell us if they encountered overflow
117 static void set_survivor_overflow(bool state) {
118 _survivor_overflow = state;
119 }
120 // Adaptive size policy support. When the young generation/old generation
121 // boundary moves, _young_generation_boundary must be reset
122 static void set_young_generation_boundary(HeapWord* v);
123
124 // Called by parallelScavengeHeap to init the tenuring threshold
125 static void initialize();
126
127 // Scavenge entry point. This may invoke a full gc; return true if so.
|
48 friend class PSKeepAliveClosure;
49 friend class PSPromotionManager;
50
51 enum ScavengeSkippedCause {
52 not_skipped = 0,
53 to_space_not_empty,
54 promoted_too_large,
55 full_follows_scavenge
56 };
57
58 // Saved value of to_space->top(), used to prevent objects in to_space from
59 // being rescanned.
60 static HeapWord* _to_space_top_before_gc;
61
62 // Number of consecutive attempts to scavenge that were skipped
63 static int _consecutive_skipped_scavenges;
64
65
66 protected:
67 // Flags/counters
68 static SpanSubjectToDiscoveryClosure _span_based_discoverer;
69 static ReferenceProcessor* _ref_processor; // Reference processor for scavenging.
70 static PSIsAliveClosure _is_alive_closure; // Closure used for reference processing
71 static PSCardTable* _card_table; // We cache the card table for fast access.
72 static bool _survivor_overflow; // Overflow this collection
73 static uint _tenuring_threshold; // tenuring threshold for next scavenge
74 static elapsedTimer _accumulated_time; // total time spent on scavenge
75 static STWGCTimer _gc_timer; // GC time book keeper
76 static ParallelScavengeTracer _gc_tracer; // GC tracing
77 // The lowest address possible for the young_gen.
78 // This is used to decide if an oop should be scavenged,
79 // cards should be marked, etc.
80 static HeapWord* _young_generation_boundary;
81 // Used to optimize compressed oops young gen boundary checking.
82 static uintptr_t _young_generation_boundary_compressed;
83 static CollectorCounters* _counters; // collector performance counters
84
85 static void clean_up_failed_promotion();
86
87 static bool should_attempt_scavenge();
88
89 static HeapWord* to_space_top_before_gc() { return _to_space_top_before_gc; }
90 static inline void save_to_space_top_before_gc();
91
92 // Private accessors
93 static PSCardTable* const card_table() { assert(_card_table != NULL, "Sanity"); return _card_table; }
94 static const ParallelScavengeTracer* gc_tracer() { return &_gc_tracer; }
95
96 public:
97 // Accessors
98 static uint tenuring_threshold() { return _tenuring_threshold; }
99 static elapsedTimer* accumulated_time() { return &_accumulated_time; }
100 static int consecutive_skipped_scavenges()
101 { return _consecutive_skipped_scavenges; }
102
103 // Performance Counters
104 static CollectorCounters* counters() { return _counters; }
105
106 static void set_subject_to_discovery_span(MemRegion mr) {
107 _span_based_discoverer.set_span(mr);
108 }
109 // Used by scavenge_contents && psMarkSweep
110 static ReferenceProcessor* const reference_processor() {
111 assert(_ref_processor != NULL, "Sanity");
112 return _ref_processor;
113 }
114 // Used to add tasks
115 static GCTaskManager* const gc_task_manager();
116 // The promotion managers tell us if they encountered overflow
117 static void set_survivor_overflow(bool state) {
118 _survivor_overflow = state;
119 }
120 // Adaptive size policy support. When the young generation/old generation
121 // boundary moves, _young_generation_boundary must be reset
122 static void set_young_generation_boundary(HeapWord* v);
123
124 // Called by parallelScavengeHeap to init the tenuring threshold
125 static void initialize();
126
127 // Scavenge entry point. This may invoke a full gc; return true if so.
|