74 public MainBodySummary { |
74 public MainBodySummary { |
75 public: |
75 public: |
76 virtual MainBodySummary* main_body_summary() { return this; } |
76 virtual MainBodySummary* main_body_summary() { return this; } |
77 }; |
77 }; |
78 |
78 |
79 class AbandonedSummary: public PauseSummary { |
|
80 }; |
|
81 |
|
82 class G1CollectorPolicy: public CollectorPolicy { |
79 class G1CollectorPolicy: public CollectorPolicy { |
83 protected: |
80 protected: |
84 // The number of pauses during the execution. |
81 // The number of pauses during the execution. |
85 long _n_pauses; |
82 long _n_pauses; |
86 |
83 |
146 TruncatedSeq* _concurrent_mark_init_times_ms; |
143 TruncatedSeq* _concurrent_mark_init_times_ms; |
147 TruncatedSeq* _concurrent_mark_remark_times_ms; |
144 TruncatedSeq* _concurrent_mark_remark_times_ms; |
148 TruncatedSeq* _concurrent_mark_cleanup_times_ms; |
145 TruncatedSeq* _concurrent_mark_cleanup_times_ms; |
149 |
146 |
150 Summary* _summary; |
147 Summary* _summary; |
151 AbandonedSummary* _abandoned_summary; |
|
152 |
148 |
153 NumberSeq* _all_pause_times_ms; |
149 NumberSeq* _all_pause_times_ms; |
154 NumberSeq* _all_full_gc_times_ms; |
150 NumberSeq* _all_full_gc_times_ms; |
155 double _stop_world_start; |
151 double _stop_world_start; |
156 NumberSeq* _all_stop_world_times_ms; |
152 NumberSeq* _all_stop_world_times_ms; |
571 void check_other_times(int level, |
567 void check_other_times(int level, |
572 NumberSeq* other_times_ms, |
568 NumberSeq* other_times_ms, |
573 NumberSeq* calc_other_times_ms) const; |
569 NumberSeq* calc_other_times_ms) const; |
574 |
570 |
575 void print_summary (PauseSummary* stats) const; |
571 void print_summary (PauseSummary* stats) const; |
576 void print_abandoned_summary(PauseSummary* summary) const; |
|
577 |
572 |
578 void print_summary (int level, const char* str, NumberSeq* seq) const; |
573 void print_summary (int level, const char* str, NumberSeq* seq) const; |
579 void print_summary_sd (int level, const char* str, NumberSeq* seq) const; |
574 void print_summary_sd (int level, const char* str, NumberSeq* seq) const; |
580 |
575 |
581 double avg_value (double* data); |
576 double avg_value (double* data); |
884 virtual void record_concurrent_pause_end(); |
879 virtual void record_concurrent_pause_end(); |
885 |
880 |
886 virtual void record_collection_pause_end_CH_strong_roots(); |
881 virtual void record_collection_pause_end_CH_strong_roots(); |
887 virtual void record_collection_pause_end_G1_strong_roots(); |
882 virtual void record_collection_pause_end_G1_strong_roots(); |
888 |
883 |
889 virtual void record_collection_pause_end(bool abandoned); |
884 virtual void record_collection_pause_end(); |
890 |
885 |
891 // Record the fact that a full collection occurred. |
886 // Record the fact that a full collection occurred. |
892 virtual void record_full_collection_start(); |
887 virtual void record_full_collection_start(); |
893 virtual void record_full_collection_end(); |
888 virtual void record_full_collection_end(); |
894 |
889 |
997 virtual bool should_do_collection_pause(size_t word_size) = 0; |
992 virtual bool should_do_collection_pause(size_t word_size) = 0; |
998 |
993 |
999 // Choose a new collection set. Marks the chosen regions as being |
994 // Choose a new collection set. Marks the chosen regions as being |
1000 // "in_collection_set", and links them together. The head and number of |
995 // "in_collection_set", and links them together. The head and number of |
1001 // the collection set are available via access methods. |
996 // the collection set are available via access methods. |
1002 virtual bool choose_collection_set(double target_pause_time_ms) = 0; |
997 virtual void choose_collection_set(double target_pause_time_ms) = 0; |
1003 |
998 |
1004 // The head of the list (via "next_in_collection_set()") representing the |
999 // The head of the list (via "next_in_collection_set()") representing the |
1005 // current collection set. |
1000 // current collection set. |
1006 HeapRegion* collection_set() { return _collection_set; } |
1001 HeapRegion* collection_set() { return _collection_set; } |
1007 |
1002 |
1254 class G1CollectorPolicy_BestRegionsFirst: public G1CollectorPolicy { |
1249 class G1CollectorPolicy_BestRegionsFirst: public G1CollectorPolicy { |
1255 CollectionSetChooser* _collectionSetChooser; |
1250 CollectionSetChooser* _collectionSetChooser; |
1256 // If the estimated is less then desirable, resize if possible. |
1251 // If the estimated is less then desirable, resize if possible. |
1257 void expand_if_possible(size_t numRegions); |
1252 void expand_if_possible(size_t numRegions); |
1258 |
1253 |
1259 virtual bool choose_collection_set(double target_pause_time_ms); |
1254 virtual void choose_collection_set(double target_pause_time_ms); |
1260 virtual void record_collection_pause_start(double start_time_sec, |
1255 virtual void record_collection_pause_start(double start_time_sec, |
1261 size_t start_used); |
1256 size_t start_used); |
1262 virtual void record_concurrent_mark_cleanup_end(size_t freed_bytes, |
1257 virtual void record_concurrent_mark_cleanup_end(size_t freed_bytes, |
1263 size_t max_live_bytes); |
1258 size_t max_live_bytes); |
1264 virtual void record_full_collection_end(); |
1259 virtual void record_full_collection_end(); |
1265 |
1260 |
1266 public: |
1261 public: |
1267 G1CollectorPolicy_BestRegionsFirst() { |
1262 G1CollectorPolicy_BestRegionsFirst() { |
1268 _collectionSetChooser = new CollectionSetChooser(); |
1263 _collectionSetChooser = new CollectionSetChooser(); |
1269 } |
1264 } |
1270 void record_collection_pause_end(bool abandoned); |
1265 void record_collection_pause_end(); |
1271 bool should_do_collection_pause(size_t word_size); |
1266 bool should_do_collection_pause(size_t word_size); |
1272 // This is not needed any more, after the CSet choosing code was |
1267 // This is not needed any more, after the CSet choosing code was |
1273 // changed to use the pause prediction work. But let's leave the |
1268 // changed to use the pause prediction work. But let's leave the |
1274 // hook in just in case. |
1269 // hook in just in case. |
1275 void note_change_in_marked_bytes(HeapRegion* r) { } |
1270 void note_change_in_marked_bytes(HeapRegion* r) { } |