mirror of
https://github.com/openjdk/jdk.git
synced 2026-06-12 21:45:05 +00:00
8135260: Split G1CollectorPolicy::finalize_cset into two parts
Reviewed-by: tschatzl, mgerdin
This commit is contained in:
parent
f5b1a5107d
commit
89ec770497
@ -4102,7 +4102,8 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
|
||||
g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty);
|
||||
#endif // YOUNG_LIST_VERBOSE
|
||||
|
||||
g1_policy()->finalize_cset(target_pause_time_ms);
|
||||
double time_remaining_ms = g1_policy()->finalize_young_cset_part(target_pause_time_ms);
|
||||
g1_policy()->finalize_old_cset_part(time_remaining_ms);
|
||||
|
||||
evacuation_info.set_collectionset_regions(g1_policy()->cset_region_length());
|
||||
|
||||
|
||||
@ -1869,7 +1869,7 @@ uint G1CollectorPolicy::calc_max_old_cset_length() {
|
||||
}
|
||||
|
||||
|
||||
void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
double G1CollectorPolicy::finalize_young_cset_part(double target_pause_time_ms) {
|
||||
double young_start_time_sec = os::elapsedTime();
|
||||
|
||||
YoungList* young_list = _g1->young_list();
|
||||
@ -1881,7 +1881,6 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
guarantee(_collection_set == NULL, "Precondition");
|
||||
|
||||
double base_time_ms = predict_base_elapsed_time_ms(_pending_cards);
|
||||
double predicted_pause_time_ms = base_time_ms;
|
||||
double time_remaining_ms = MAX2(target_pause_time_ms - base_time_ms, 0.0);
|
||||
|
||||
ergo_verbose4(ErgoCSetConstruction | ErgoHigh,
|
||||
@ -1925,15 +1924,16 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
_collection_set = _inc_cset_head;
|
||||
_collection_set_bytes_used_before = _inc_cset_bytes_used_before;
|
||||
time_remaining_ms = MAX2(time_remaining_ms - _inc_cset_predicted_elapsed_time_ms, 0.0);
|
||||
predicted_pause_time_ms += _inc_cset_predicted_elapsed_time_ms;
|
||||
|
||||
ergo_verbose3(ErgoCSetConstruction | ErgoHigh,
|
||||
ergo_verbose4(ErgoCSetConstruction | ErgoHigh,
|
||||
"add young regions to CSet",
|
||||
ergo_format_region("eden")
|
||||
ergo_format_region("survivors")
|
||||
ergo_format_ms("predicted young region time"),
|
||||
ergo_format_ms("predicted young region time")
|
||||
ergo_format_ms("target pause time"),
|
||||
eden_region_length, survivor_region_length,
|
||||
_inc_cset_predicted_elapsed_time_ms);
|
||||
_inc_cset_predicted_elapsed_time_ms,
|
||||
target_pause_time_ms);
|
||||
|
||||
// The number of recorded young regions is the incremental
|
||||
// collection set's current size
|
||||
@ -1942,8 +1942,13 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
double young_end_time_sec = os::elapsedTime();
|
||||
phase_times()->record_young_cset_choice_time_ms((young_end_time_sec - young_start_time_sec) * 1000.0);
|
||||
|
||||
// Set the start of the non-young choice time.
|
||||
double non_young_start_time_sec = young_end_time_sec;
|
||||
return time_remaining_ms;
|
||||
}
|
||||
|
||||
void G1CollectorPolicy::finalize_old_cset_part(double time_remaining_ms) {
|
||||
double non_young_start_time_sec = os::elapsedTime();
|
||||
double predicted_old_time_ms = 0.0;
|
||||
|
||||
|
||||
if (!collector_state()->gcs_are_young()) {
|
||||
CollectionSetChooser* cset_chooser = _collectionSetChooser;
|
||||
@ -2031,7 +2036,7 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
|
||||
// We will add this region to the CSet.
|
||||
time_remaining_ms = MAX2(time_remaining_ms - predicted_time_ms, 0.0);
|
||||
predicted_pause_time_ms += predicted_time_ms;
|
||||
predicted_old_time_ms += predicted_time_ms;
|
||||
cset_chooser->remove_and_move_to_next(hr);
|
||||
_g1->old_set_remove(hr);
|
||||
add_old_region_to_cset(hr);
|
||||
@ -2066,16 +2071,13 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
|
||||
|
||||
stop_incremental_cset_building();
|
||||
|
||||
ergo_verbose5(ErgoCSetConstruction,
|
||||
ergo_verbose3(ErgoCSetConstruction,
|
||||
"finish choosing CSet",
|
||||
ergo_format_region("eden")
|
||||
ergo_format_region("survivors")
|
||||
ergo_format_region("old")
|
||||
ergo_format_ms("predicted pause time")
|
||||
ergo_format_ms("target pause time"),
|
||||
eden_region_length, survivor_region_length,
|
||||
ergo_format_ms("predicted old region time")
|
||||
ergo_format_ms("time remaining"),
|
||||
old_cset_region_length(),
|
||||
predicted_pause_time_ms, target_pause_time_ms);
|
||||
predicted_old_time_ms, time_remaining_ms);
|
||||
|
||||
double non_young_end_time_sec = os::elapsedTime();
|
||||
phase_times()->record_non_young_cset_choice_time_ms((non_young_end_time_sec - non_young_start_time_sec) * 1000.0);
|
||||
|
||||
@ -473,7 +473,7 @@ private:
|
||||
|
||||
// The number of bytes in the collection set before the pause. Set from
|
||||
// the incrementally built collection set at the start of an evacuation
|
||||
// pause, and incremented in finalize_cset() when adding old regions
|
||||
// pause, and incremented in finalize_old_cset_part() when adding old regions
|
||||
// (if any) to the collection set.
|
||||
size_t _collection_set_bytes_used_before;
|
||||
|
||||
@ -689,7 +689,8 @@ public:
|
||||
// Choose a new collection set. Marks the chosen regions as being
|
||||
// "in_collection_set", and links them together. The head and number of
|
||||
// the collection set are available via access methods.
|
||||
void finalize_cset(double target_pause_time_ms);
|
||||
double finalize_young_cset_part(double target_pause_time_ms);
|
||||
virtual void finalize_old_cset_part(double time_remaining_ms);
|
||||
|
||||
// The head of the list (via "next_in_collection_set()") representing the
|
||||
// current collection set.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user