--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Thu Jul 22 10:27:41 2010 -0400
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Wed Aug 04 13:03:23 2010 -0400
@@ -88,7 +88,6 @@
_all_mod_union_times_ms(new NumberSeq()),
_summary(new Summary()),
- _abandoned_summary(new AbandonedSummary()),
#ifndef PRODUCT
_cur_clear_ct_time_ms(0.0),
@@ -1124,7 +1123,7 @@
// Anything below that is considered to be zero
#define MIN_TIMER_GRANULARITY 0.0000001
-void G1CollectorPolicy::record_collection_pause_end(bool abandoned) {
+void G1CollectorPolicy::record_collection_pause_end() {
double end_time_sec = os::elapsedTime();
double elapsed_ms = _last_pause_time_ms;
bool parallel = ParallelGCThreads > 0;
@@ -1134,7 +1133,7 @@
size_t cur_used_bytes = _g1->used();
assert(cur_used_bytes == _g1->recalculate_used(), "It should!");
bool last_pause_included_initial_mark = false;
- bool update_stats = !abandoned && !_g1->evacuation_failed();
+ bool update_stats = !_g1->evacuation_failed();
#ifndef PRODUCT
if (G1YoungSurvRateVerbose) {
@@ -1273,12 +1272,7 @@
gclog_or_tty->print_cr(" Recording collection pause(%d)", _n_pauses);
}
- PauseSummary* summary;
- if (abandoned) {
- summary = _abandoned_summary;
- } else {
- summary = _summary;
- }
+ PauseSummary* summary = _summary;
double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms);
double mark_stack_scan_time = avg_value(_par_last_mark_stack_scan_times_ms);
@@ -1346,61 +1340,58 @@
double other_time_ms = elapsed_ms;
- if (!abandoned) {
- if (_satb_drain_time_set)
- other_time_ms -= _cur_satb_drain_time_ms;
-
- if (parallel)
- other_time_ms -= _cur_collection_par_time_ms + _cur_clear_ct_time_ms;
- else
- other_time_ms -=
- update_rs_time +
- ext_root_scan_time + mark_stack_scan_time +
- scan_rs_time + obj_copy_time;
+ if (_satb_drain_time_set) {
+ other_time_ms -= _cur_satb_drain_time_ms;
+ }
+
+ if (parallel) {
+ other_time_ms -= _cur_collection_par_time_ms + _cur_clear_ct_time_ms;
+ } else {
+ other_time_ms -=
+ update_rs_time +
+ ext_root_scan_time + mark_stack_scan_time +
+ scan_rs_time + obj_copy_time;
}
if (PrintGCDetails) {
- gclog_or_tty->print_cr("%s%s, %1.8lf secs]",
- abandoned ? " (abandoned)" : "",
+ gclog_or_tty->print_cr("%s, %1.8lf secs]",
(last_pause_included_initial_mark) ? " (initial-mark)" : "",
elapsed_ms / 1000.0);
- if (!abandoned) {
- if (_satb_drain_time_set) {
- print_stats(1, "SATB Drain Time", _cur_satb_drain_time_ms);
- }
- if (_last_satb_drain_processed_buffers >= 0) {
- print_stats(2, "Processed Buffers", _last_satb_drain_processed_buffers);
- }
- if (parallel) {
- print_stats(1, "Parallel Time", _cur_collection_par_time_ms);
- print_par_stats(2, "GC Worker Start Time",
- _par_last_gc_worker_start_times_ms, false);
- print_par_stats(2, "Update RS", _par_last_update_rs_times_ms);
- print_par_sizes(3, "Processed Buffers",
- _par_last_update_rs_processed_buffers, true);
- print_par_stats(2, "Ext Root Scanning",
- _par_last_ext_root_scan_times_ms);
- print_par_stats(2, "Mark Stack Scanning",
- _par_last_mark_stack_scan_times_ms);
- print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms);
- print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms);
- print_par_stats(2, "Termination", _par_last_termination_times_ms);
- print_par_sizes(3, "Termination Attempts",
- _par_last_termination_attempts, true);
- print_par_stats(2, "GC Worker End Time",
- _par_last_gc_worker_end_times_ms, false);
- print_stats(2, "Other", parallel_other_time);
- print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
- } else {
- print_stats(1, "Update RS", update_rs_time);
- print_stats(2, "Processed Buffers",
- (int)update_rs_processed_buffers);
- print_stats(1, "Ext Root Scanning", ext_root_scan_time);
- print_stats(1, "Mark Stack Scanning", mark_stack_scan_time);
- print_stats(1, "Scan RS", scan_rs_time);
- print_stats(1, "Object Copying", obj_copy_time);
- }
+ if (_satb_drain_time_set) {
+ print_stats(1, "SATB Drain Time", _cur_satb_drain_time_ms);
+ }
+ if (_last_satb_drain_processed_buffers >= 0) {
+ print_stats(2, "Processed Buffers", _last_satb_drain_processed_buffers);
+ }
+ if (parallel) {
+ print_stats(1, "Parallel Time", _cur_collection_par_time_ms);
+ print_par_stats(2, "GC Worker Start Time",
+ _par_last_gc_worker_start_times_ms, false);
+ print_par_stats(2, "Update RS", _par_last_update_rs_times_ms);
+ print_par_sizes(3, "Processed Buffers",
+ _par_last_update_rs_processed_buffers, true);
+ print_par_stats(2, "Ext Root Scanning",
+ _par_last_ext_root_scan_times_ms);
+ print_par_stats(2, "Mark Stack Scanning",
+ _par_last_mark_stack_scan_times_ms);
+ print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms);
+ print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms);
+ print_par_stats(2, "Termination", _par_last_termination_times_ms);
+ print_par_sizes(3, "Termination Attempts",
+ _par_last_termination_attempts, true);
+ print_par_stats(2, "GC Worker End Time",
+ _par_last_gc_worker_end_times_ms, false);
+ print_stats(2, "Other", parallel_other_time);
+ print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
+ } else {
+ print_stats(1, "Update RS", update_rs_time);
+ print_stats(2, "Processed Buffers",
+ (int)update_rs_processed_buffers);
+ print_stats(1, "Ext Root Scanning", ext_root_scan_time);
+ print_stats(1, "Mark Stack Scanning", mark_stack_scan_time);
+ print_stats(1, "Scan RS", scan_rs_time);
+ print_stats(1, "Object Copying", obj_copy_time);
}
#ifndef PRODUCT
print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms);
@@ -2176,33 +2167,27 @@
print_summary(1, "Other", summary->get_other_seq());
{
NumberSeq calc_other_times_ms;
- if (body_summary != NULL) {
- // not abandoned
- if (parallel) {
- // parallel
- NumberSeq* other_parts[] = {
- body_summary->get_satb_drain_seq(),
- body_summary->get_parallel_seq(),
- body_summary->get_clear_ct_seq()
- };
- calc_other_times_ms = NumberSeq(summary->get_total_seq(),
- 3, other_parts);
- } else {
- // serial
- NumberSeq* other_parts[] = {
- body_summary->get_satb_drain_seq(),
- body_summary->get_update_rs_seq(),
- body_summary->get_ext_root_scan_seq(),
- body_summary->get_mark_stack_scan_seq(),
- body_summary->get_scan_rs_seq(),
- body_summary->get_obj_copy_seq()
- };
- calc_other_times_ms = NumberSeq(summary->get_total_seq(),
- 7, other_parts);
- }
+ if (parallel) {
+ // parallel
+ NumberSeq* other_parts[] = {
+ body_summary->get_satb_drain_seq(),
+ body_summary->get_parallel_seq(),
+ body_summary->get_clear_ct_seq()
+ };
+ calc_other_times_ms = NumberSeq(summary->get_total_seq(),
+ 3, other_parts);
} else {
- // abandoned
- calc_other_times_ms = NumberSeq();
+ // serial
+ NumberSeq* other_parts[] = {
+ body_summary->get_satb_drain_seq(),
+ body_summary->get_update_rs_seq(),
+ body_summary->get_ext_root_scan_seq(),
+ body_summary->get_mark_stack_scan_seq(),
+ body_summary->get_scan_rs_seq(),
+ body_summary->get_obj_copy_seq()
+ };
+ calc_other_times_ms = NumberSeq(summary->get_total_seq(),
+ 7, other_parts);
}
check_other_times(1, summary->get_other_seq(), &calc_other_times_ms);
}
@@ -2213,20 +2198,6 @@
gclog_or_tty->print_cr("");
}
-void
-G1CollectorPolicy::print_abandoned_summary(PauseSummary* summary) const {
- bool printed = false;
- if (summary->get_total_seq()->num() > 0) {
- printed = true;
- print_summary(summary);
- }
- if (!printed) {
- print_indent(0);
- gclog_or_tty->print_cr("none");
- gclog_or_tty->print_cr("");
- }
-}
-
void G1CollectorPolicy::print_tracing_info() const {
if (TraceGen0Time) {
gclog_or_tty->print_cr("ALL PAUSES");
@@ -2240,9 +2211,6 @@
gclog_or_tty->print_cr("EVACUATION PAUSES");
print_summary(_summary);
- gclog_or_tty->print_cr("ABANDONED PAUSES");
- print_abandoned_summary(_abandoned_summary);
-
gclog_or_tty->print_cr("MISC");
print_summary_sd(0, "Stop World", _all_stop_world_times_ms);
print_summary_sd(0, "Yields", _all_yield_times_ms);
@@ -2868,19 +2836,12 @@
}
#endif // !PRODUCT
-bool
+void
G1CollectorPolicy_BestRegionsFirst::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();
- // The result that this routine will return. This will be set to
- // false if:
- // * we're doing a young or partially young collection and we
- // have added the youg regions to collection set, or
- // * we add old regions to the collection set.
- bool abandon_collection = true;
-
start_recording_regions();
guarantee(target_pause_time_ms > 0.0,
@@ -2984,10 +2945,6 @@
}
assert(_inc_cset_size == _g1->young_list()->length(), "Invariant");
- if (_inc_cset_size > 0) {
- assert(_collection_set != NULL, "Invariant");
- abandon_collection = false;
- }
double young_end_time_sec = os::elapsedTime();
_recorded_young_cset_choice_time_ms =
@@ -3009,10 +2966,6 @@
NumberSeq seq;
double avg_prediction = 100000000000000000.0; // something very large
- // Save the current size of the collection set to detect
- // if we actually added any old regions.
- size_t n_young_regions = _collection_set_size;
-
do {
hr = _collectionSetChooser->getNextMarkedRegion(time_remaining_ms,
avg_prediction);
@@ -3039,12 +2992,6 @@
if (!adaptive_young_list_length() &&
_collection_set_size < _young_list_fixed_length)
_should_revert_to_full_young_gcs = true;
-
- if (_collection_set_size > n_young_regions) {
- // We actually added old regions to the collection set
- // so we are not abandoning this collection.
- abandon_collection = false;
- }
}
choose_collection_set_end:
@@ -3057,19 +3004,6 @@
double non_young_end_time_sec = os::elapsedTime();
_recorded_non_young_cset_choice_time_ms =
(non_young_end_time_sec - non_young_start_time_sec) * 1000.0;
-
- // Here we are supposed to return whether the pause should be
- // abandoned or not (i.e., whether the collection set is empty or
- // not). However, this introduces a subtle issue when a pause is
- // initiated explicitly with System.gc() and
- // +ExplicitGCInvokesConcurrent (see Comment #2 in CR 6944166), it's
- // supposed to start a marking cycle, and it's abandoned. So, by
- // returning false here we are telling the caller never to consider
- // a pause to be abandoned. We'll actually remove all the code
- // associated with abandoned pauses as part of CR 6963209, but we are
- // just disabling them this way for the moment to avoid increasing
- // further the amount of changes for CR 6944166.
- return false;
}
void G1CollectorPolicy_BestRegionsFirst::record_full_collection_end() {
@@ -3084,7 +3018,7 @@
}
void G1CollectorPolicy_BestRegionsFirst::
-record_collection_pause_end(bool abandoned) {
- G1CollectorPolicy::record_collection_pause_end(abandoned);
+record_collection_pause_end() {
+ G1CollectorPolicy::record_collection_pause_end();
assert(assertMarkedBytesDataOK(), "Marked regions not OK at pause end.");
}