Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @ 4787:2ace1c4ee8da
6888336: G1: avoid explicitly marking and pushing objects in survivor spaces
Summary: This change simplifies the interaction between GC and concurrent marking. By disabling survivor spaces during the initial-mark pause we don't need to propagate marks of objects we copy during each GC (since we never need to copy an explicitly marked object).
Reviewed-by: johnc, brutisso
author | tonyp |
---|---|
date | Tue, 10 Jan 2012 18:58:13 -0500 |
parents | 1cbe7978b021 |
children | 9509c20bba28 |
comparison
equal
deleted
inserted
replaced
4786:1d6185f732aa | 4787:2ace1c4ee8da |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
65 | 65 |
66 class MainBodySummary: public CHeapObj { | 66 class MainBodySummary: public CHeapObj { |
67 define_num_seq(satb_drain) // optional | 67 define_num_seq(satb_drain) // optional |
68 define_num_seq(parallel) // parallel only | 68 define_num_seq(parallel) // parallel only |
69 define_num_seq(ext_root_scan) | 69 define_num_seq(ext_root_scan) |
70 define_num_seq(mark_stack_scan) | 70 define_num_seq(satb_filtering) |
71 define_num_seq(update_rs) | 71 define_num_seq(update_rs) |
72 define_num_seq(scan_rs) | 72 define_num_seq(scan_rs) |
73 define_num_seq(obj_copy) | 73 define_num_seq(obj_copy) |
74 define_num_seq(termination) // parallel only | 74 define_num_seq(termination) // parallel only |
75 define_num_seq(parallel_other) // parallel only | 75 define_num_seq(parallel_other) // parallel only |
213 double* _cur_aux_times_ms; | 213 double* _cur_aux_times_ms; |
214 bool* _cur_aux_times_set; | 214 bool* _cur_aux_times_set; |
215 | 215 |
216 double* _par_last_gc_worker_start_times_ms; | 216 double* _par_last_gc_worker_start_times_ms; |
217 double* _par_last_ext_root_scan_times_ms; | 217 double* _par_last_ext_root_scan_times_ms; |
218 double* _par_last_mark_stack_scan_times_ms; | 218 double* _par_last_satb_filtering_times_ms; |
219 double* _par_last_update_rs_times_ms; | 219 double* _par_last_update_rs_times_ms; |
220 double* _par_last_update_rs_processed_buffers; | 220 double* _par_last_update_rs_processed_buffers; |
221 double* _par_last_scan_rs_times_ms; | 221 double* _par_last_scan_rs_times_ms; |
222 double* _par_last_obj_copy_times_ms; | 222 double* _par_last_obj_copy_times_ms; |
223 double* _par_last_termination_times_ms; | 223 double* _par_last_termination_times_ms; |
839 | 839 |
840 void record_ext_root_scan_time(int worker_i, double ms) { | 840 void record_ext_root_scan_time(int worker_i, double ms) { |
841 _par_last_ext_root_scan_times_ms[worker_i] = ms; | 841 _par_last_ext_root_scan_times_ms[worker_i] = ms; |
842 } | 842 } |
843 | 843 |
844 void record_mark_stack_scan_time(int worker_i, double ms) { | 844 void record_satb_filtering_time(int worker_i, double ms) { |
845 _par_last_mark_stack_scan_times_ms[worker_i] = ms; | 845 _par_last_satb_filtering_times_ms[worker_i] = ms; |
846 } | 846 } |
847 | 847 |
848 void record_satb_drain_time(double ms) { | 848 void record_satb_drain_time(double ms) { |
849 assert(_g1->mark_in_progress(), "shouldn't be here otherwise"); | 849 assert(_g1->mark_in_progress(), "shouldn't be here otherwise"); |
850 _cur_satb_drain_time_ms = ms; | 850 _cur_satb_drain_time_ms = ms; |
1144 | 1144 |
1145 void note_stop_adding_survivor_regions() { | 1145 void note_stop_adding_survivor_regions() { |
1146 _survivor_surv_rate_group->stop_adding_regions(); | 1146 _survivor_surv_rate_group->stop_adding_regions(); |
1147 } | 1147 } |
1148 | 1148 |
1149 void tenure_all_objects() { | |
1150 _max_survivor_regions = 0; | |
1151 _tenuring_threshold = 0; | |
1152 } | |
1153 | |
1149 void record_survivor_regions(size_t regions, | 1154 void record_survivor_regions(size_t regions, |
1150 HeapRegion* head, | 1155 HeapRegion* head, |
1151 HeapRegion* tail) { | 1156 HeapRegion* tail) { |
1152 _recorded_survivor_regions = regions; | 1157 _recorded_survivor_regions = regions; |
1153 _recorded_survivor_head = head; | 1158 _recorded_survivor_head = head; |