--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Thu Oct 13 13:54:29 2011 -0400
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Fri Oct 14 11:12:24 2011 -0400
@@ -225,16 +225,12 @@
_recent_CS_bytes_surviving(new TruncatedSeq(NumPrevPausesForHeuristics)),
_recent_avg_pause_time_ratio(0.0),
- _num_markings(0),
- _n_marks(0),
- _n_pauses_at_mark_end(0),
_all_full_gc_times_ms(new NumberSeq()),
// G1PausesBtwnConcMark defaults to -1
// so the hack is to do the cast QQQ FIXME
_pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark),
- _n_marks_since_last_pause(0),
_initiate_conc_mark_if_possible(false),
_during_initial_mark_pause(false),
_should_revert_to_full_young_gcs(false),
@@ -440,6 +436,7 @@
_reserve_regions = 0;
initialize_all();
+ _collectionSetChooser = new CollectionSetChooser();
}
// Increment "i", mod "len"
@@ -921,6 +918,7 @@
// Reset survivors SurvRateGroup.
_survivor_surv_rate_group->reset();
update_young_list_target_length();
+ _collectionSetChooser->updateAfterFullCollection();
}
void G1CollectorPolicy::record_stop_world_start() {
@@ -1029,39 +1027,7 @@
_mark_cleanup_start_sec = os::elapsedTime();
}
-void
-G1CollectorPolicy::record_concurrent_mark_cleanup_end(size_t freed_bytes,
- size_t max_live_bytes) {
- record_concurrent_mark_cleanup_end_work1(freed_bytes, max_live_bytes);
- record_concurrent_mark_cleanup_end_work2();
-}
-
-void
-G1CollectorPolicy::
-record_concurrent_mark_cleanup_end_work1(size_t freed_bytes,
- size_t max_live_bytes) {
- if (_n_marks < 2) {
- _n_marks++;
- }
-}
-
-// The important thing about this is that it includes "os::elapsedTime".
-void G1CollectorPolicy::record_concurrent_mark_cleanup_end_work2() {
- double end_time_sec = os::elapsedTime();
- double elapsed_time_ms = (end_time_sec - _mark_cleanup_start_sec)*1000.0;
- _concurrent_mark_cleanup_times_ms->add(elapsed_time_ms);
- _cur_mark_stop_world_time_ms += elapsed_time_ms;
- _prev_collection_pause_end_ms += elapsed_time_ms;
-
- _mmu_tracker->add_pause(_mark_cleanup_start_sec, end_time_sec, true);
-
- _num_markings++;
- _n_pauses_at_mark_end = _n_pauses;
- _n_marks_since_last_pause++;
-}
-
-void
-G1CollectorPolicy::record_concurrent_mark_cleanup_completed() {
+void G1CollectorPolicy::record_concurrent_mark_cleanup_completed() {
_should_revert_to_full_young_gcs = false;
_last_full_young_gc = true;
_in_marking_window = false;
@@ -1501,11 +1467,9 @@
summary->record_other_time_ms(other_time_ms);
}
for (int i = 0; i < _aux_num; ++i)
- if (_cur_aux_times_set[i])
+ if (_cur_aux_times_set[i]) {
_all_aux_times_ms[i].add(_cur_aux_times_ms[i]);
-
- // Reset marks-between-pauses counter.
- _n_marks_since_last_pause = 0;
+ }
// Update the efficiency-since-mark vars.
double proc_ms = elapsed_ms * (double) _parallel_gc_threads;
@@ -1729,6 +1693,8 @@
double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0;
adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms);
// </NEW PREDICTION>
+
+ assert(assertMarkedBytesDataOK(), "Marked regions not OK at pause end.");
}
#define EXT_SIZE_FORMAT "%d%s"
@@ -2156,10 +2122,6 @@
}
}
-void G1CollectorPolicy::note_start_of_mark_thread() {
- _mark_thread_startup_sec = os::elapsedTime();
-}
-
class CountCSClosure: public HeapRegionClosure {
G1CollectorPolicy* _g1_policy;
public:
@@ -2446,7 +2408,7 @@
}
};
-bool G1CollectorPolicy_BestRegionsFirst::assertMarkedBytesDataOK() {
+bool G1CollectorPolicy::assertMarkedBytesDataOK() {
HRSortIndexIsOKClosure cl(_collectionSetChooser);
_g1->heap_region_iterate(&cl);
return true;
@@ -2532,12 +2494,6 @@
}
}
-void
-G1CollectorPolicy_BestRegionsFirst::
-record_collection_pause_start(double start_time_sec, size_t start_used) {
- G1CollectorPolicy::record_collection_pause_start(start_time_sec, start_used);
-}
-
class KnownGarbageClosure: public HeapRegionClosure {
CollectionSetChooser* _hrSorted;
@@ -2645,20 +2601,20 @@
};
void
-G1CollectorPolicy_BestRegionsFirst::
-record_concurrent_mark_cleanup_end(size_t freed_bytes,
- size_t max_live_bytes) {
- double start;
- if (G1PrintParCleanupStats) start = os::elapsedTime();
- record_concurrent_mark_cleanup_end_work1(freed_bytes, max_live_bytes);
+G1CollectorPolicy::record_concurrent_mark_cleanup_end() {
+ double start_sec;
+ if (G1PrintParCleanupStats) {
+ start_sec = os::elapsedTime();
+ }
_collectionSetChooser->clearMarkedHeapRegions();
- double clear_marked_end;
+ double clear_marked_end_sec;
if (G1PrintParCleanupStats) {
- clear_marked_end = os::elapsedTime();
- gclog_or_tty->print_cr(" clear marked regions + work1: %8.3f ms.",
- (clear_marked_end - start)*1000.0);
+ clear_marked_end_sec = os::elapsedTime();
+ gclog_or_tty->print_cr(" clear marked regions: %8.3f ms.",
+ (clear_marked_end_sec - start_sec) * 1000.0);
}
+
if (G1CollectedHeap::use_parallel_gc_threads()) {
const size_t OverpartitionFactor = 4;
const size_t MinWorkUnit = 8;
@@ -2677,27 +2633,25 @@
KnownGarbageClosure knownGarbagecl(_collectionSetChooser);
_g1->heap_region_iterate(&knownGarbagecl);
}
- double known_garbage_end;
+ double known_garbage_end_sec;
if (G1PrintParCleanupStats) {
- known_garbage_end = os::elapsedTime();
+ known_garbage_end_sec = os::elapsedTime();
gclog_or_tty->print_cr(" compute known garbage: %8.3f ms.",
- (known_garbage_end - clear_marked_end)*1000.0);
+ (known_garbage_end_sec - clear_marked_end_sec) * 1000.0);
}
+
_collectionSetChooser->sortMarkedHeapRegions();
- double sort_end;
+ double end_sec = os::elapsedTime();
if (G1PrintParCleanupStats) {
- sort_end = os::elapsedTime();
gclog_or_tty->print_cr(" sorting: %8.3f ms.",
- (sort_end - known_garbage_end)*1000.0);
+ (end_sec - known_garbage_end_sec) * 1000.0);
}
- record_concurrent_mark_cleanup_end_work2();
- double work2_end;
- if (G1PrintParCleanupStats) {
- work2_end = os::elapsedTime();
- gclog_or_tty->print_cr(" work2: %8.3f ms.",
- (work2_end - sort_end)*1000.0);
- }
+ double elapsed_time_ms = (end_sec - _mark_cleanup_start_sec) * 1000.0;
+ _concurrent_mark_cleanup_times_ms->add(elapsed_time_ms);
+ _cur_mark_stop_world_time_ms += elapsed_time_ms;
+ _prev_collection_pause_end_ms += elapsed_time_ms;
+ _mmu_tracker->add_pause(_mark_cleanup_start_sec, end_sec, true);
}
// Add the heap region at the head of the non-incremental collection set
@@ -2912,9 +2866,7 @@
}
#endif // !PRODUCT
-void
-G1CollectorPolicy_BestRegionsFirst::choose_collection_set(
- double target_pause_time_ms) {
+void G1CollectorPolicy::choose_collection_set(double target_pause_time_ms) {
// Set this here - in case we're not doing young collections.
double non_young_start_time_sec = os::elapsedTime();
@@ -3115,14 +3067,3 @@
_recorded_non_young_cset_choice_time_ms =
(non_young_end_time_sec - non_young_start_time_sec) * 1000.0;
}
-
-void G1CollectorPolicy_BestRegionsFirst::record_full_collection_end() {
- G1CollectorPolicy::record_full_collection_end();
- _collectionSetChooser->updateAfterFullCollection();
-}
-
-void G1CollectorPolicy_BestRegionsFirst::
-record_collection_pause_end() {
- G1CollectorPolicy::record_collection_pause_end();
- assert(assertMarkedBytesDataOK(), "Marked regions not OK at pause end.");
-}